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)

empteammate
AdaBob
AdaEli
BobAda
BobEli
EliAda
EliBob

Cross Join (first 10 combinations)

productcustomer
Laptop ProAlice
Laptop ProBen
Laptop ProCara
Laptop ProDan
Laptop ProEva
Wireless MouseAlice
Wireless MouseBen
Wireless MouseCara
Wireless MouseDan
Wireless MouseEva