SQL Join 개념 잡기

🌈 m1naworld ·2025년 1월 6일
post-thumbnail

예시 테이블 및 데이터

customers 테이블

customer_idnamecity
1AliceNew York
2BobLos Angeles
3CharlieChicago
4MinaKorea

orders 테이블

order_idcustomer_idproduct
1011Laptop
1022SmartPhone
1032Tablet
1045Monitor

1. INNER JOIN

INNER JOIN은 두 테이블 간에 매칭되는 데이터만 반환한다.
조건에 일치하지 않는 데이터는 제외되며 가장 많이 사용되는 JOIN 방식이다.

SELECT customers.name, orders.product
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.customer_id;
  • 결과
nameproduct
AliceLaptop
BobSmartphone
BobTablet

2. OUTER JOIN

OUTER JOIN은 한쪽에만 데이터가 있어도 결과로 나오며, LEFT JOIN, RIGHT JOIN, FULL JOIN이 있다.

- LEFT JOIN

LEFT JOIN은 왼쪽 테이블의 모든 데이터를 반환하며, 오른쪽 테이블에 매칭 되지 않는 데이터는 NULL로 채워진다.

SELECT customers.name, orders.product
FROM customers
LEFT JOIN orders
ON customers.customer_id = orders.customer_id;
  • 결과
nameproduct
AliceLaptop
BobSmartphone
BobTablet
CharlieNULL
MinaNULL

- RIGHT JOIN

RIGHT JOIN은 오른쪽 테이블의 모든 데이터를 반환하며, 왼쪽 테이블에 매칭되지 않는 데이터는 NULL로 채워진다.

SELECT customers.name, orders.product
FROM customers
RIGHT JOIN orders
ON customers.customer_id = orders.customer_id;
  • 쿼리 결과
nameproduct
AliceLaptop
BobSmartphone
BobTablet
NULLMonitor

- FULL JOIN

FULL JOIN은 양쪽 테이블의 모든 데이터를 반환하며, 매칭되지 않는 데이터는 NULL로 표시된다.

SELECT customers.name, orders.product
FROM customers
FULL JOIN orders
ON customers.customer_id = orders.customer_id;
  • 쿼리 결과
nameproduct
AliceLaptop
BobSmartphone
BobTablet
CharlieNULL
MinaNULL
NULLMonitor

3. CROSS JOIN

한쪽 테이블의 모든행과 다른쪽 테이블의 모든 행을 조인시킨다. 상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수가 되므로, 카테시안 곱 (Cartesian Product)이라고도 한다.
실무에서는 자주 사용되지 않으며, 특정 조건이 없는 모든 데이터를 비교하거나 테스트를 진행할 때 사용된다고 한다.

SELECT customers.name, orders.product
FROM customers
CROSS JOIN orders;
  • 결과
nameproduct
AliceLaptop
AliceSmartphone
AliceTablet
AliceMonitor
BobLaptop
BobSmartphone
BobTablet
BobMonitor
CharlieLaptop
CharlieSmartphone
CharlieTablet
CharlieMonitor
MinaLaptop
MinaSmartphone
MinaTablet
MinaMonitor

4. SELF JOIN

자기 자신과 조인한다는 의미로, 하나의 테이블을 기준으로 데이터를 서로 비교한다.
예를 들어, 직원과 상사의 관계를 나타낼 때 사용된다.

employees 테이블

employee_idnamemanager_id
1AliceNULL
2Bob1
3Charlie1
4David2
SELECT e1.name AS employee, e2.name AS manager
FROM employees e1
LEFT JOIN employees e2
ON e1.manager_id = e2.employee_id;
  • 결과
employeemanager
AliceNULL
BobAlice
CharlieAlice
DavidBob
profile
개발자로 사는 내 삶은 즐거워 👾

0개의 댓글