📖 Scenario: You are managing a small bookstore database. You want to organize your queries better by using the WITH clause to create temporary named result sets.
🎯 Goal: Build a SQL query using the WITH clause to create a temporary table of books published after 2010, then select their titles and authors from that temporary table.
📋 What You'll Learn
Create a WITH clause named recent_books that selects all columns from books where published_year is greater than 2010
Write a main SELECT query that selects title and author from recent_books
💡 Why This Matters
🌍 Real World
Using the WITH clause helps organize complex queries by breaking them into smaller, readable parts.
💼 Career
Many database jobs require writing clear and maintainable SQL queries using WITH clauses for better performance and readability.
Progress0 / 4 steps
1
Create the books table
Write a SQL statement to create a table called books with columns id (integer), title (text), author (text), and published_year (integer).
SQL
Hint
Use CREATE TABLE books and define the columns with their data types.
2
Insert sample data into books
Insert these exact rows into the books table: (1, 'The Silent Patient', 'Alex Michaelides', 2019), (2, 'Educated', 'Tara Westover', 2018), (3, 'The Great Gatsby', 'F. Scott Fitzgerald', 1925).
SQL
Hint
Use INSERT INTO books (id, title, author, published_year) VALUES with the given rows.
3
Write the WITH clause for recent books
Write a SQL query using the WITH clause named recent_books that selects all columns from books where published_year is greater than 2010.
SQL
Hint
Use WITH recent_books AS (SELECT * FROM books WHERE published_year > 2010).
4
Select titles and authors from recent_books
Complete the SQL query by selecting title and author from the recent_books temporary table defined in the WITH clause.
SQL
Hint
After the WITH clause, write SELECT title, author FROM recent_books;.
Practice
(1/5)
1. What is the main purpose of the WITH clause in SQL?
easy
A. To create temporary named result sets called Common Table Expressions (CTEs)
B. To permanently store data in a new table
C. To delete rows from a table
D. To update values in a table
Solution
Step 1: Understand the role of WITH clause
The WITH clause defines temporary named result sets called CTEs that exist only during query execution.
Step 2: Compare options with WITH clause purpose
Options B, C, and D describe permanent or data modification actions, which are not the purpose of WITH.
Final Answer:
To create temporary named result sets called Common Table Expressions (CTEs) -> Option A
Quick Check:
WITH clause = Temporary named results [OK]
Hint: WITH clause defines temporary named queries [OK]
Common Mistakes:
Thinking WITH creates permanent tables
Confusing WITH with data modification commands
Assuming WITH is used for deleting or updating data
2. Which of the following is the correct syntax to start a query using a single CTE named cte_example?
easy
A. CREATE cte_example AS (SELECT * FROM table_name); SELECT * FROM cte_example;
B. WITH (SELECT * FROM table_name) AS cte_example SELECT * FROM cte_example;
C. WITH cte_example AS (SELECT * FROM table_name) SELECT * FROM cte_example;
D. SELECT * FROM cte_example WITH (SELECT * FROM table_name);
Solution
Step 1: Recall correct WITH clause syntax
The correct syntax is: WITH cte_name AS (subquery) followed by the main SELECT using cte_name.
Step 2: Check each option's syntax
WITH cte_example AS (SELECT * FROM table_name) SELECT * FROM cte_example; matches the correct syntax. The other options misuse keywords or order.
Final Answer:
WITH cte_example AS (SELECT * FROM table_name) SELECT * FROM cte_example; -> Option C
Quick Check:
WITH cte_name AS (query) SELECT ... [OK]
Hint: WITH cte_name AS (query) SELECT ... is correct syntax [OK]
Common Mistakes:
Using CREATE instead of WITH for CTE
Placing AS after the subquery instead of after CTE name
Misordering clauses in the query
3. Given the following SQL query, what will be the output?
WITH numbers AS (SELECT 1 AS num UNION ALL SELECT 2 UNION ALL SELECT 3) SELECT SUM(num) FROM numbers;
medium
A. 1
B. 3
C. Syntax error
D. 6
Solution
Step 1: Understand the CTE content
The CTE named 'numbers' contains rows with values 1, 2, and 3.
Step 2: Calculate the SUM of num column
Sum of 1 + 2 + 3 equals 6.
Final Answer:
6 -> Option D
Quick Check:
1 + 2 + 3 = 6 [OK]
Hint: Sum values inside CTE to get result [OK]
Common Mistakes:
Assuming UNION ALL removes duplicates
Confusing SUM with COUNT
Expecting syntax error due to CTE
4. Identify the error in this SQL query using a CTE:
WITH cte1 AS SELECT * FROM employees SELECT * FROM cte1;
medium
A. CTE name cannot be cte1
B. Missing parentheses around the CTE's SELECT statement
C. SELECT * FROM cte1 should come before WITH clause
D. WITH clause cannot be used with SELECT
Solution
Step 1: Check CTE syntax
The CTE definition must have parentheses around the SELECT query: AS (SELECT ...)
Step 2: Identify missing parentheses
The query misses parentheses after AS, causing syntax error.
Final Answer:
Missing parentheses around the CTE's SELECT statement -> Option B
Quick Check:
CTE query must be in parentheses [OK]
Hint: Always put CTE query inside parentheses after AS [OK]
Common Mistakes:
Omitting parentheses around CTE query
Placing main SELECT before WITH clause
Thinking CTE names have restrictions beyond naming rules
5. Consider this SQL query using multiple CTEs:
WITH cte1 AS (SELECT id, salary FROM employees WHERE department = 'Sales'), cte2 AS (SELECT id, bonus FROM bonuses) SELECT cte1.id, cte1.salary, cte2.bonus FROM cte1 LEFT JOIN cte2 ON cte1.id = cte2.id;
What is the purpose of using multiple CTEs here?
hard
A. To organize complex queries by separating filtering and joining steps
B. To permanently store intermediate results in the database
C. To speed up query execution by caching results automatically
D. To avoid using JOINs by combining data in CTEs
Solution
Step 1: Analyze the role of each CTE
cte1 filters employees in Sales with id and salary; cte2 selects bonuses by id.
Step 2: Understand the main query usage
The main query joins these CTEs to combine salary and bonus data for Sales employees.
Step 3: Identify why multiple CTEs are used
Using multiple CTEs organizes the query into clear steps: filtering and joining, improving readability.
Final Answer:
To organize complex queries by separating filtering and joining steps -> Option A
Quick Check:
Multiple CTEs = Organize complex queries [OK]
Hint: Use multiple CTEs to break complex queries into parts [OK]
Common Mistakes:
Thinking CTEs store data permanently
Assuming CTEs automatically speed up queries
Believing CTEs replace JOINs entirely
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.