Bird
Raised Fist0
PostgreSQLquery~10 mins

UNION and UNION ALL in PostgreSQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - UNION and UNION ALL
Start: Two SELECT queries
↓
Execute first SELECT
↓
Combine results
↓
UNION: Remove duplicates
↓
Final result set returned
↓
End
Two SELECT queries run separately, then their results combine. UNION removes duplicates; UNION ALL keeps all rows.
Execution Sample
PostgreSQL
SELECT name FROM fruits
UNION
SELECT name FROM vegetables;
Combines names from fruits and vegetables tables, removing duplicates.
Execution Table
StepActionFirst SELECT ResultSecond SELECT ResultCombined ResultDuplicates Removed?Final Output
1Execute first SELECT[Apple, Banana, Orange]N/A
2Execute second SELECT[Apple, Banana, Orange][Carrot, Banana, Tomato]N/A
3Combine results[Apple, Banana, Orange][Carrot, Banana, Tomato][Apple, Banana, Orange, Carrot, Banana, Tomato]N/A
4Apply UNION (remove duplicates)[Apple, Banana, Orange][Carrot, Banana, Tomato][Apple, Banana, Orange, Carrot, Tomato]Yes[Apple, Banana, Orange, Carrot, Tomato]
5Return final result (UNION)[Apple, Banana, Orange, Carrot, Tomato]
6Apply UNION ALL (keep duplicates) [alternative after step 3][Apple, Banana, Orange, Carrot, Banana, Tomato]No[Apple, Banana, Orange, Carrot, Banana, Tomato]
💡 Execution stops after combining and applying UNION or UNION ALL rules to produce final output.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4 (UNION)After Step 6 (UNION ALL)
First SELECT Resultempty[Apple, Banana, Orange][Apple, Banana, Orange][Apple, Banana, Orange][Apple, Banana, Orange][Apple, Banana, Orange]
Second SELECT Resultemptyempty[Carrot, Banana, Tomato][Carrot, Banana, Tomato][Carrot, Banana, Tomato][Carrot, Banana, Tomato]
Combined Resultemptyemptyempty[Apple, Banana, Orange, Carrot, Banana, Tomato][Apple, Banana, Orange, Carrot, Tomato][Apple, Banana, Orange, Carrot, Banana, Tomato]
Final Outputemptyemptyemptyempty[Apple, Banana, Orange, Carrot, Tomato][Apple, Banana, Orange, Carrot, Banana, Tomato]
Key Moments - 3 Insights
Why does UNION remove some rows but UNION ALL does not?
UNION removes duplicate rows after combining both SELECT results (see step 4 in execution_table), while UNION ALL keeps all rows including duplicates (see step 6).
Are the two SELECT queries executed separately or together?
They are executed separately first (steps 1 and 2), then their results are combined (step 3).
Does the order of rows stay the same after UNION?
No, UNION may reorder rows because it removes duplicates and returns a distinct set (step 4). UNION ALL preserves all rows in combined order (step 6).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 4, what happens to duplicates?
ADuplicates are removed
BDuplicates are kept
CDuplicates are doubled
DDuplicates are ignored only in first SELECT
💡 Hint
Check the 'Duplicates Removed?' and 'Final Output' columns at step 4 in execution_table.
At which step do the two SELECT query results combine?
AStep 1
BStep 2
CStep 3
DStep 5
💡 Hint
Look for the step where 'Combined Result' column first shows both SELECT results together.
If we use UNION ALL instead of UNION, what changes in the final output?
ADuplicates are removed
BDuplicates remain in the output
COnly first SELECT results are shown
DOutput is empty
💡 Hint
Compare 'Final Output' at step 4 (UNION) and step 6 (UNION ALL) in execution_table.
Concept Snapshot
UNION combines results of two SELECT queries and removes duplicates.
UNION ALL combines results and keeps all duplicates.
Both require same number of columns and compatible types.
UNION sorts and removes duplicates; UNION ALL is faster and keeps all rows.
Use UNION when duplicates matter; UNION ALL for full combined data.
Full Transcript
This visual execution shows how UNION and UNION ALL work in PostgreSQL. First, two SELECT queries run separately to get their results. Then, these results combine into one list. UNION removes duplicate rows from this combined list before returning it, while UNION ALL keeps all rows including duplicates. The execution table traces each step: running each SELECT, combining results, removing duplicates for UNION, and returning the final output. Variables track the state of results after each step. Key moments clarify why duplicates are removed only by UNION and how the queries execute separately before combining. The quiz tests understanding of when duplicates are removed and when results combine. The snapshot summarizes the main differences and usage tips for UNION and UNION ALL.

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

  1. Step 1: Understand the behavior of UNION

    UNION combines results from two queries and removes duplicate rows to give unique results.
  2. Step 2: Understand the behavior of UNION ALL

    UNION ALL combines results but keeps all rows, including duplicates.
  3. Final Answer:

    UNION removes duplicates, UNION ALL keeps duplicates. -> Option A
  4. 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

  1. Step 1: Check the correct keyword spacing

    The correct keyword is UNION ALL with a space between UNION and ALL.
  2. Step 2: Verify the SELECT statements are complete

    Both queries must be valid SELECT statements with matching column counts and types.
  3. Final Answer:

    SELECT name FROM students UNION ALL SELECT name FROM teachers; -> Option A
  4. 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

  1. Step 1: Combine values from both tables using UNION

    UNION removes duplicates, so 'banana' appears only once.
  2. Step 2: Order the combined results alphabetically

    Ordering by value gives: 'apple', 'banana', 'cherry'.
  3. Final Answer:

    apple, banana, cherry -> Option D
  4. 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

  1. Step 1: Check column counts in both SELECT statements

    UNION ALL requires both SELECTs to have the same number of columns.
  2. Step 2: Identify error cause

    If column counts differ, PostgreSQL throws an error.
  3. Final Answer:

    The two SELECT statements have different numbers of columns. -> Option B
  4. 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

  1. Step 1: Understand requirement to keep duplicates

    To keep duplicates, use UNION ALL because UNION removes duplicates.
  2. Step 2: Check WHERE clause usage

    Both queries filter department = 'Sales', so WHERE must be in both queries.
  3. Final Answer:

    SELECT id, name FROM employees UNION ALL SELECT id, name FROM contractors WHERE department = 'Sales'; Because UNION ALL keeps duplicates. -> Option C
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard