A CROSS JOIN combines every row from one table with every row from another table. It helps to see all possible pairs between two sets of data.
CROSS JOIN behavior in PostgreSQL
SELECT * FROM table1 CROSS JOIN table2;
The result has rows equal to the number of rows in table1 multiplied by the number of rows in table2.
You can also write CROSS JOIN simply by listing tables separated by commas, but using CROSS JOIN is clearer.
SELECT * FROM colors CROSS JOIN sizes;
SELECT products.name, stores.location FROM products CROSS JOIN stores;
SELECT * FROM table1, table2;
This example creates two small tables, colors and sizes, then uses CROSS JOIN to list all color-size pairs.
CREATE TEMP TABLE colors (color TEXT); INSERT INTO colors VALUES ('Red'), ('Blue'); CREATE TEMP TABLE sizes (size TEXT); INSERT INTO sizes VALUES ('Small'), ('Large'); SELECT color, size FROM colors CROSS JOIN sizes ORDER BY color, size;
CROSS JOIN can create very large results if tables have many rows, so use it carefully.
It does not require any matching columns like INNER JOIN does.
CROSS JOIN pairs every row from the first table with every row from the second.
It is useful to create all possible combinations between two sets of data.
Be careful with large tables because the result size grows quickly.
Practice
CROSS JOIN do in PostgreSQL?Solution
Step 1: Understand CROSS JOIN concept
A CROSS JOIN creates combinations of all rows from both tables without any condition.Step 2: Compare with other JOIN types
Unlike INNER JOIN or LEFT JOIN, CROSS JOIN does not filter or match rows but pairs all possible combinations.Final Answer:
Pairs every row from the first table with every row from the second table. -> Option AQuick Check:
CROSS JOIN = all combinations [OK]
- Confusing CROSS JOIN with INNER JOIN
- Thinking CROSS JOIN filters rows
- Assuming CROSS JOIN requires a join condition
Solution
Step 1: Recall CROSS JOIN syntax
The correct syntax isSELECT * FROM table1 CROSS JOIN table2;without any ON clause.Step 2: Identify incorrect options
SELECT * FROM table1 JOIN table2 ON table1.id = table2.id; uses INNER JOIN with ON clause, C has invalid keyword INNER CROSS JOIN, A has misplaced ON keyword.Final Answer:
SELECT * FROM table1 CROSS JOIN table2; -> Option AQuick Check:
Syntax for CROSS JOIN = SELECT * FROM table1 CROSS JOIN table2; [OK]
- Adding ON clause with CROSS JOIN
- Using INNER CROSS JOIN which is invalid
- Misplacing keywords in the query
Colors:color_id | color_name
1 | Red
2 | Blue
Shapes:shape_id | shape_name
1 | Circle
2 | Square
3 | Triangle
How many rows will this query return?
SELECT color_name, shape_name FROM Colors CROSS JOIN Shapes;Solution
Step 1: Count rows in each table
Colors has 2 rows, Shapes has 3 rows.Step 2: Calculate CROSS JOIN result size
Result rows = 2 x 3 = 6 rows, all combinations of colors and shapes.Final Answer:
6 -> Option DQuick Check:
2 x 3 = 6 rows [OK]
- Adding rows instead of multiplying
- Ignoring one table's row count
- Confusing CROSS JOIN with INNER JOIN
Table A:id | name
1 | Alice
2 | Bob
Table B:code
X
Y
What is the result of:
SELECT A.name, B.code FROM A CROSS JOIN B;Solution
Step 1: Understand CROSS JOIN output
Each row in A pairs with every row in B, so 2 rows in A x 2 rows in B = 4 rows total.Step 2: List all combinations
Pairs are (Alice, X), (Alice, Y), (Bob, X), (Bob, Y) in that order.Final Answer:
[('Alice', 'X'), ('Alice', 'Y'), ('Bob', 'X'), ('Bob', 'Y')] -> Option BQuick Check:
2 x 2 = 4 rows [OK]
- Assuming CROSS JOIN filters rows
- Mixing order of pairs incorrectly
- Counting only matching rows instead of all combinations
SELECT * FROM table1 CROSS JOIN table2 ON table1.id = table2.id;What is the problem with this query?
Solution
Step 1: Check CROSS JOIN syntax rules
CROSS JOIN syntax does not support ON clause; adding ON causes syntax error.Step 2: Understand error cause
ON clause is used with INNER or LEFT JOIN, not CROSS JOIN.Final Answer:
Syntax error because CROSS JOIN does not allow ON clause. -> Option CQuick Check:
CROSS JOIN + ON = syntax error [OK]
- Thinking CROSS JOIN can have ON clause
- Confusing CROSS JOIN with INNER JOIN
- Expecting filtered results from CROSS JOIN
Ready to prove it?
Pass the test and this pattern moves unknown
