SQL - Self & Cross Join
Overview
SELF JOIN joins a table to itself. CROSS JOIN returns every combination of rows (cartesian product).
-- employees in same department (excluding self)
SELECT a.first_name AS emp, b.first_name AS teammate
FROM employees a
JOIN employees b ON a.department_id=b.department_id AND a.id<>b.id;
-- small cross product
SELECT p.name, c.name
FROM products p CROSS JOIN customers c;
-- self join
SELECT a.first_name AS emp, b.first_name AS teammate
FROM employees a JOIN employees b ON a.department_id=b.department_id AND a.id<>b.id;
-- cross join
SELECT p.name, c.name FROM products p CROSS JOIN customers c;
-- self join
SELECT a.first_name AS emp, b.first_name AS teammate
FROM employees a JOIN employees b ON a.department_id=b.department_id AND a.id<>b.id;
-- cross join
SELECT p.name, c.name FROM products p CROSS JOIN customers c;
Prerequisite
Load the Standard Test Data.
Expected Output (live)
Self Join (same department)
| emp | teammate |
|---|---|
| Ada | Bob |
| Ada | Eli |
| Bob | Ada |
| Bob | Eli |
| Eli | Ada |
| Eli | Bob |
Cross Join (first 10 combinations)
| product | customer |
|---|---|
| Laptop Pro | Alice |
| Laptop Pro | Ben |
| Laptop Pro | Cara |
| Laptop Pro | Dan |
| Laptop Pro | Eva |
| Wireless Mouse | Alice |
| Wireless Mouse | Ben |
| Wireless Mouse | Cara |
| Wireless Mouse | Dan |
| Wireless Mouse | Eva |