📖 Scenario: You work at a bookstore that has two separate tables: one for new arrivals and one for best sellers. You want to create combined lists of books for different purposes.
🎯 Goal: Build SQL queries using UNION and UNION ALL to combine data from two tables: new_arrivals and best_sellers. You will first create the tables, then write queries to combine their data without duplicates and with duplicates.
📋 What You'll Learn
Create two tables named new_arrivals and best_sellers with columns book_id and title.
Insert specific book records into both tables.
Write a query using UNION to combine the two tables without duplicate titles.
Write a query using UNION ALL to combine the two tables including duplicates.
💡 Why This Matters
🌍 Real World
Combining data from multiple sources is common in real-world databases, such as merging product lists, customer records, or event logs.
💼 Career
Understanding how to use UNION and UNION ALL is essential for database querying and reporting tasks in roles like data analyst, database developer, and backend engineer.
Progress0 / 4 steps
1
Create the tables and insert data
Create two tables called new_arrivals and best_sellers with columns book_id (integer) and title (text). Insert these exact rows into new_arrivals: (1, 'The Silent Patient'), (2, 'Where the Crawdads Sing'), (3, 'The Midnight Library'). Insert these exact rows into best_sellers: (10, 'The Midnight Library'), (11, 'Becoming'), (12, 'Educated').
PostgreSQL
Hint
Use CREATE TABLE statements for both tables. Then use INSERT INTO with the exact values given.
2
Write a UNION query to combine unique book titles
Write a SQL query that selects the title column from new_arrivals and best_sellers and combines them using UNION to show all unique book titles without duplicates.
PostgreSQL
Hint
Use SELECT title FROM new_arrivals UNION SELECT title FROM best_sellers to combine unique titles.
3
Write a UNION ALL query to combine all book titles including duplicates
Write a SQL query that selects the title column from new_arrivals and best_sellers and combines them using UNION ALL to show all book titles including duplicates.
PostgreSQL
Hint
Use UNION ALL to include duplicates from both tables.
4
Add ORDER BY to sort the combined results
Modify the UNION ALL query to add ORDER BY title ASC at the end to sort the combined list of book titles alphabetically.
PostgreSQL
Hint
Add ORDER BY title ASC after the UNION ALL query to sort the results alphabetically.
Practice
(1/5)
1. What is the main difference between UNION and UNION ALL in PostgreSQL?
easy
A. UNION removes duplicate rows, while UNION ALL keeps all rows including duplicates.
B. UNION requires matching column names, UNION ALL does not.
C. UNION ALL removes duplicates, UNION keeps duplicates.
D. UNION can combine different numbers of columns, UNION ALL cannot.
Solution
Step 1: Understand the behavior of UNION
UNION combines results from two queries and removes duplicate rows to give unique results.
Step 2: Understand the behavior of UNION ALL
UNION ALL combines results but keeps all rows, including duplicates.
Final Answer:
UNION removes duplicates, UNION ALL keeps duplicates. -> Option A
Quick Check:
Duplicates removed = UNION, duplicates kept = UNION ALL [OK]
Hint: UNION removes duplicates; UNION ALL keeps all rows [OK]
Common Mistakes:
Thinking UNION ALL removes duplicates
Believing UNION allows different column counts
Confusing column name requirements
2. Which of the following is the correct syntax to combine two SELECT queries using UNION ALL in PostgreSQL?
easy
A. SELECT name FROM students UNION ALL SELECT name FROM teachers;
B. SELECT name FROM students UNIONALL SELECT name FROM teachers;
C. SELECT name FROM students UNION ALL FROM teachers;
D. SELECT name FROM students UNION ALL SELECT name FROM teachers WHERE;
Solution
Step 1: Check the correct keyword spacing
The correct keyword is UNION ALL with a space between UNION and ALL.
Step 2: Verify the SELECT statements are complete
Both queries must be valid SELECT statements with matching column counts and types.
Final Answer:
SELECT name FROM students UNION ALL SELECT name FROM teachers; -> Option A
Quick Check:
Correct syntax uses 'UNION ALL' with space [OK]
Hint: Use space between UNION and ALL, both queries must be valid [OK]
Common Mistakes:
Writing UNIONALL as one word
Missing SELECT in second query
Adding WHERE without condition
3. Given two tables: Table A: id | value 1 | 'apple' 2 | 'banana'
Table B: id | value 2 | 'banana' 3 | 'cherry'
What is the result of this query?
SELECT value FROM A UNION SELECT value FROM B ORDER BY value;
medium
A. apple, banana, banana, cherry
B. apple, banana, cherry, banana
C. banana, cherry
D. apple, banana, cherry
Solution
Step 1: Combine values from both tables using UNION
UNION removes duplicates, so 'banana' appears only once.
Step 2: Order the combined results alphabetically
Ordering by value gives: 'apple', 'banana', 'cherry'.
Final Answer:
apple, banana, cherry -> Option D
Quick Check:
UNION removes duplicates, so only one 'banana' [OK]
Hint: UNION removes duplicates; check ordering carefully [OK]
Common Mistakes:
Including duplicate 'banana' with UNION
Ignoring ORDER BY effect
Confusing UNION with UNION ALL
4. Consider this query:
SELECT id FROM table1 UNION ALL SELECT id FROM table2;
It returns an error. What is the most likely cause?
medium
A. The tables have different names.
B. The two SELECT statements have different numbers of columns.
C. UNION ALL cannot be used with SELECT statements.
D. The query is missing a semicolon.
Solution
Step 1: Check column counts in both SELECT statements
UNION ALL requires both SELECTs to have the same number of columns.
Step 2: Identify error cause
If column counts differ, PostgreSQL throws an error.
Final Answer:
The two SELECT statements have different numbers of columns. -> Option B
Quick Check:
Column count mismatch causes UNION ALL error [OK]
Hint: Ensure both SELECTs have same column count for UNION ALL [OK]
Common Mistakes:
Thinking table names must match
Believing UNION ALL disallows SELECT
Ignoring column count mismatch
5. You want to combine two queries:
SELECT id, name FROM employees WHERE department = 'Sales' SELECT id, name FROM contractors WHERE department = 'Sales'
and keep all rows including duplicates. Which query correctly does this and why?
hard
A. SELECT id, name FROM employees UNION ALL SELECT id, name FROM contractors; Because WHERE is not needed in second query.
B. SELECT id, name FROM employees UNION SELECT id, name FROM contractors WHERE department = 'Sales'; Because UNION removes duplicates.
C. SELECT id, name FROM employees UNION ALL SELECT id, name FROM contractors WHERE department = 'Sales'; Because UNION ALL keeps duplicates.
D. SELECT id, name FROM employees UNION SELECT id, name FROM contractors; Because UNION ALL is invalid here.
Solution
Step 1: Understand requirement to keep duplicates
To keep duplicates, use UNION ALL because UNION removes duplicates.
Step 2: Check WHERE clause usage
Both queries filter department = 'Sales', so WHERE must be in both queries.
Final Answer:
SELECT id, name FROM employees UNION ALL SELECT id, name FROM contractors WHERE department = 'Sales'; Because UNION ALL keeps duplicates. -> Option C
Quick Check:
Keep duplicates = UNION ALL with correct WHERE clauses [OK]
Hint: Use UNION ALL to keep duplicates; apply WHERE in each SELECT [OK]
Common Mistakes:
Using UNION instead of UNION ALL
Omitting WHERE in second query
Thinking UNION ALL is invalid
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.