Bird
Raised Fist0
PostgreSQLquery~10 mins

INTERSECT and EXCEPT in PostgreSQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - INTERSECT and EXCEPT
Start with Query A
↓
Start with Query B
↓
Find common rows
↓
Return result set
↓
End
This flow shows how two queries produce sets of rows, then INTERSECT returns only rows in both sets, while EXCEPT returns rows in the first set but not in the second.
Execution Sample
PostgreSQL
SELECT name FROM fruits
INTERSECT
SELECT name FROM tropical_fruits;
This query returns fruit names that appear in both fruits and tropical_fruits tables.
Execution Table
StepQuery A ResultQuery B ResultOperationResult After Step
1['apple', 'banana', 'mango', 'orange']['mango', 'pineapple', 'banana']StartN/A
2N/AN/AINTERSECTFind common rows between A and B
3N/AN/AResult['banana', 'mango']
4N/AN/AEXCEPTFind rows in A not in B
5N/AN/AResult['apple', 'orange']
6N/AN/AEndExecution stops
💡 Execution stops after returning the result set for the chosen operation.
Variable Tracker
VariableStartAfter INTERSECTAfter EXCEPTFinal
Query A ResultN/A['apple', 'banana', 'mango', 'orange']['apple', 'banana', 'mango', 'orange']N/A
Query B ResultN/A['mango', 'pineapple', 'banana']['mango', 'pineapple', 'banana']N/A
Result SetN/A['banana', 'mango']['apple', 'orange']Depends on operation
Key Moments - 3 Insights
Why does INTERSECT return only 'banana' and 'mango'?
Because INTERSECT returns only rows that appear in both Query A and Query B results, as shown in execution_table row 3.
Why does EXCEPT return 'apple' and 'orange'?
Because EXCEPT returns rows in Query A that are not in Query B, as shown in execution_table row 5.
Are duplicates removed in INTERSECT and EXCEPT results?
Yes, both INTERSECT and EXCEPT return distinct rows only, so duplicates are removed automatically.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the result set after the INTERSECT operation?
A['banana', 'mango']
B['apple', 'orange']
C['mango', 'pineapple', 'banana']
D['apple', 'banana', 'mango', 'orange']
💡 Hint
Check the 'Result After Step' column at Step 3 in the execution_table.
At which step does the EXCEPT operation produce its result?
AStep 2
BStep 5
CStep 3
DStep 1
💡 Hint
Look at the 'Operation' column for EXCEPT and find the corresponding 'Result After Step'.
If 'banana' was removed from Query B Result, what would INTERSECT return?
A['banana', 'mango']
B['apple', 'orange']
C['mango']
D[]
💡 Hint
Refer to variable_tracker to see which rows are common between Query A and Query B.
Concept Snapshot
INTERSECT and EXCEPT combine two query results.
INTERSECT returns rows common to both queries.
EXCEPT returns rows in first query not in second.
Both remove duplicates automatically.
Syntax:
SELECT ... FROM ... INTERSECT SELECT ... FROM ...;
SELECT ... FROM ... EXCEPT SELECT ... FROM ...;
Full Transcript
This visual execution shows how INTERSECT and EXCEPT work in PostgreSQL. First, two queries produce result sets. INTERSECT finds rows present in both sets, returning only those common rows. EXCEPT finds rows in the first set that are not in the second, returning those unique to the first. Both operations remove duplicates automatically. The execution table traces these steps with example fruit names. Key moments clarify why certain rows appear in results. The quiz tests understanding by referencing these visuals.

Practice

(1/5)
1. What does the INTERSECT operator do in PostgreSQL?
easy
A. Returns rows only in the second query
B. Returns all rows from the first query
C. Combines all rows from both queries without duplicates
D. Returns rows common to both queries

Solution

  1. Step 1: Understand INTERSECT purpose

    INTERSECT returns only rows that appear in both query results.
  2. Step 2: Compare with other set operations

    Unlike UNION or EXCEPT, INTERSECT finds common rows, not all or unique rows.
  3. Final Answer:

    Returns rows common to both queries -> Option D
  4. Quick Check:

    INTERSECT = common rows [OK]
Hint: INTERSECT = find common rows between two queries [OK]
Common Mistakes:
  • Confusing INTERSECT with UNION
  • Thinking INTERSECT returns all rows from first query
  • Mixing INTERSECT with EXCEPT
2. Which of the following is the correct syntax to find rows in table1 but not in table2 using EXCEPT?
easy
A. SELECT * FROM table1 INTERSECT SELECT * FROM table2;
B. SELECT * FROM table1 EXCEPT SELECT * FROM table2;
C. SELECT * FROM table1 UNION EXCEPT SELECT * FROM table2;
D. SELECT * FROM table1 EXCEPT ALL SELECT * FROM table2;

Solution

  1. Step 1: Identify EXCEPT syntax

    The correct syntax is: SELECT ... EXCEPT SELECT ... to get rows in first query not in second.
  2. Step 2: Check options for correct usage

    SELECT * FROM table1 EXCEPT SELECT * FROM table2; matches correct syntax; others misuse INTERSECT, UNION, or EXCEPT ALL (which is valid but different).
  3. Final Answer:

    SELECT * FROM table1 EXCEPT SELECT * FROM table2; -> Option B
  4. Quick Check:

    EXCEPT syntax = SELECT ... EXCEPT SELECT ... [OK]
Hint: Use EXCEPT between two SELECTs to find rows only in first [OK]
Common Mistakes:
  • Using INTERSECT instead of EXCEPT
  • Adding UNION incorrectly
  • Using EXCEPT ALL when not needed
3. Given these tables:
table_a:
id
1
2
3

table_b:
id
2
3
4

What is the result of:
SELECT id FROM table_a INTERSECT SELECT id FROM table_b;
medium
A. [1, 2, 3]
B. [1]
C. [2, 3]
D. [4]

Solution

  1. Step 1: List rows from both tables

    table_a has ids 1, 2, 3; table_b has ids 2, 3, 4.
  2. Step 2: Find common ids using INTERSECT

    Common ids are 2 and 3 only.
  3. Final Answer:

    [2, 3] -> Option C
  4. Quick Check:

    INTERSECT = common rows = [2, 3] [OK]
Hint: INTERSECT returns only ids present in both tables [OK]
Common Mistakes:
  • Including ids only in one table
  • Confusing INTERSECT with UNION
  • Expecting all ids combined
4. What is wrong with this query?
SELECT id, name FROM table1 EXCEPT SELECT id FROM table2;
medium
A. The number of columns in both SELECTs differ
B. EXCEPT cannot be used with SELECT statements
C. The query is missing a WHERE clause
D. The table names are invalid

Solution

  1. Step 1: Check column counts in both SELECTs

    First SELECT returns two columns (id, name), second returns one column (id).
  2. Step 2: Understand EXCEPT requirements

    EXCEPT requires both SELECTs to have the same number and compatible types of columns.
  3. Final Answer:

    The number of columns in both SELECTs differ -> Option A
  4. Quick Check:

    EXCEPT needs equal columns [OK]
Hint: EXCEPT requires same number of columns in both SELECTs [OK]
Common Mistakes:
  • Ignoring column count mismatch
  • Thinking EXCEPT needs WHERE clause
  • Assuming table names cause error
5. You have two tables:
employees with columns id, name
contractors with columns id, name
You want to find people who are either employees or contractors but not both.
Which query correctly returns this list?
hard
A. SELECT id, name FROM employees EXCEPT SELECT id, name FROM contractors UNION SELECT id, name FROM contractors EXCEPT SELECT id, name FROM employees;
B. SELECT id, name FROM employees INTERSECT SELECT id, name FROM contractors;
C. SELECT id, name FROM employees UNION SELECT id, name FROM contractors;
D. SELECT id, name FROM employees EXCEPT SELECT id, name FROM contractors;

Solution

  1. Step 1: Understand the requirement

    We want people in employees or contractors but not in both (symmetric difference).
  2. Step 2: Use EXCEPT and UNION to find symmetric difference

    EXCEPT finds those in one table but not the other; UNION combines both exclusive sets.
  3. Step 3: Analyze options

    SELECT id, name FROM employees EXCEPT SELECT id, name FROM contractors UNION SELECT id, name FROM contractors EXCEPT SELECT id, name FROM employees; correctly combines EXCEPT in both directions with UNION to get symmetric difference.
  4. Final Answer:

    SELECT id, name FROM employees EXCEPT SELECT id, name FROM contractors UNION SELECT id, name FROM contractors EXCEPT SELECT id, name FROM employees; -> Option A
  5. Quick Check:

    Symmetric difference = EXCEPT + UNION [OK]
Hint: Symmetric difference = (A EXCEPT B) UNION (B EXCEPT A) [OK]
Common Mistakes:
  • Using only INTERSECT or UNION
  • Using EXCEPT one way only
  • Confusing symmetric difference with intersection
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