
customers 테이블
| customer_id | name | city |
|---|---|---|
| 1 | Alice | New York |
| 2 | Bob | Los Angeles |
| 3 | Charlie | Chicago |
| 4 | Mina | Korea |
orders 테이블
| order_id | customer_id | product |
|---|---|---|
| 101 | 1 | Laptop |
| 102 | 2 | SmartPhone |
| 103 | 2 | Tablet |
| 104 | 5 | Monitor |
1. INNER JOININNER JOIN은 두 테이블 간에 매칭되는 데이터만 반환한다.
조건에 일치하지 않는 데이터는 제외되며 가장 많이 사용되는 JOIN 방식이다.
SELECT customers.name, orders.product
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.customer_id;
| name | product |
|---|---|
| Alice | Laptop |
| Bob | Smartphone |
| Bob | Tablet |
2. OUTER JOINOUTER JOIN은 한쪽에만 데이터가 있어도 결과로 나오며, LEFT JOIN, RIGHT JOIN, FULL JOIN이 있다.
- LEFT JOINLEFT JOIN은 왼쪽 테이블의 모든 데이터를 반환하며, 오른쪽 테이블에 매칭 되지 않는 데이터는 NULL로 채워진다.
SELECT customers.name, orders.product
FROM customers
LEFT JOIN orders
ON customers.customer_id = orders.customer_id;
| name | product |
|---|---|
| Alice | Laptop |
| Bob | Smartphone |
| Bob | Tablet |
| Charlie | NULL |
| Mina | NULL |
- RIGHT JOINRIGHT JOIN은 오른쪽 테이블의 모든 데이터를 반환하며, 왼쪽 테이블에 매칭되지 않는 데이터는 NULL로 채워진다.
SELECT customers.name, orders.product
FROM customers
RIGHT JOIN orders
ON customers.customer_id = orders.customer_id;
| name | product |
|---|---|
| Alice | Laptop |
| Bob | Smartphone |
| Bob | Tablet |
| NULL | Monitor |
- FULL JOINFULL JOIN은 양쪽 테이블의 모든 데이터를 반환하며, 매칭되지 않는 데이터는 NULL로 표시된다.
SELECT customers.name, orders.product
FROM customers
FULL JOIN orders
ON customers.customer_id = orders.customer_id;
| name | product |
|---|---|
| Alice | Laptop |
| Bob | Smartphone |
| Bob | Tablet |
| Charlie | NULL |
| Mina | NULL |
| NULL | Monitor |
3. CROSS JOIN한쪽 테이블의 모든행과 다른쪽 테이블의 모든 행을 조인시킨다. 상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수가 되므로, 카테시안 곱 (Cartesian Product)이라고도 한다.
실무에서는 자주 사용되지 않으며, 특정 조건이 없는 모든 데이터를 비교하거나 테스트를 진행할 때 사용된다고 한다.
SELECT customers.name, orders.product
FROM customers
CROSS JOIN orders;
| name | product |
|---|---|
| Alice | Laptop |
| Alice | Smartphone |
| Alice | Tablet |
| Alice | Monitor |
| Bob | Laptop |
| Bob | Smartphone |
| Bob | Tablet |
| Bob | Monitor |
| Charlie | Laptop |
| Charlie | Smartphone |
| Charlie | Tablet |
| Charlie | Monitor |
| Mina | Laptop |
| Mina | Smartphone |
| Mina | Tablet |
| Mina | Monitor |
4. SELF JOIN자기 자신과 조인한다는 의미로, 하나의 테이블을 기준으로 데이터를 서로 비교한다.
예를 들어, 직원과 상사의 관계를 나타낼 때 사용된다.
employees 테이블
| employee_id | name | manager_id |
|---|---|---|
| 1 | Alice | NULL |
| 2 | Bob | 1 |
| 3 | Charlie | 1 |
| 4 | David | 2 |
SELECT e1.name AS employee, e2.name AS manager
FROM employees e1
LEFT JOIN employees e2
ON e1.manager_id = e2.employee_id;
| employee | manager |
|---|---|
| Alice | NULL |
| Bob | Alice |
| Charlie | Alice |
| David | Bob |