데이터베이스에서 Join은 관계형 데이터베이스에서 두 개 이상의 테이블을 결합하여 필요한 데이터를 가져오는 작업을 말한다.
customer_id | customer_name
1 | Alice
2 | Bob
3 | Charlie
order_id | customer_id | order_date
101 | 1 | 2023-01-01
102 | 3 | 2023-01-02
103 | 2 | 2023-01-03
104 | 1 | 2023-01-04
Inner Join은 두 테이블 사이에서 일치하는 행만 반환한다.
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
order_id | customer_name
101 | Alice
102 | Charlie
103 | Bob
104 | Alice
Inner Join은 두 테이블 사이에서 customer_id
가 일치하는 행만을 결과로 반환한다.
Left Join은 왼쪽 테이블의 모든 행을 포함하여, 오른쪽 테이블에서 일치하는 행이 있는 경우 해당 행을 반환한다.
SELECT customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
customer_name | order_id
Alice | 101
Alice | 104
Bob | 103
Charlie | 102
Left Join 왼쪽 테이블 customers
의 모든 행을 포함하며, 오른쪽 테이블인 orders
에서 일치하는 행이 있는 경우 해당 행을 가져온다. 일치하는 것이 없는 경우에는 NULL이 된다.
Right Join은 Left Join의 반대로 오른쪽 테이블의 모든 행을 포함하여, 왼쪽 테이블에서 일치하는 행이 있는 경우 행을 반환한다.
SELECT customers.customer_name, orders.order_id
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;
customer_name | order_id
Alice | 101
Alice | 104
Bob | 103
Charlie | 102
Right Join은 Left Join의 반대로 오른쪽 테이블인 orders
의 모든 행을 포함하며, 왼쪽 테이블인 customers
에서 일치하는 행이 있는 경우 해당 행을 가져온다.
Full Outer Join은 두 테이블 사이에서 일치하는 모든 행을 반환한다. 일치하지 않은 경우에도 각 테이블의 모든 행을 포함한다.
SELECT customers.customer_name, orders.order_id
FROM customers
FULL OUTER JOIN orders ON customers.customer_id = orders.customer_id;
customer_name | order_id
Alice | 101
Alice | 104
Bob | 103
Charlie | 102
NULL | 105
Full Outer Join은 두 테이블 사이에서 일치하는 모든 행을 포함하며, 일치하지 않은 경우에도 각 테이블의 모든 행을 포함하여 겨로가를 반환한다.
Cross Join은 첫 번째 테이블의 각 행과 두 번째 테이블의 모든 행을 조합하여 결과를 반환한다. 결과는 첫 번째 테이블의 행 수와 두 번째 테이블의 행 수의 곱만큼 생성된다.
SELECT customers.customer_name, orders.order_id
FROM customers
CROSS JOIN orders;
customer_name | order_id
Alice | 101
Alice | 102
Alice | 103
Alice | 104
Bob | 101
Bob | 102
Bob | 103
Bob | 104
Charlie | 101
Charlie | 102
Charlie | 103
Charlie | 104
Cross Join은 첫 번째 테이블의 각 행과 두 번째 테이블의 모든 행을 조합하여 결과를 생성한다. 위의 예시에서는 모든 고객과 모든 주문을 모두 조합하여 총 12개의 결과가 생성된다.