2 분 소요

JOIN은 SQL에서 두 개 이상의 테이블을 연결하여 관련 데이터를 한 번에 조회할 수 있는 강력한 기능입니다. 데이터베이스에서 관계형 구조를 활용하는 핵심 개념으로, 효율적인 질의(Query) 작성에 필수입니다.


1. JOIN의 종류와 차이점

JOIN 종류 설명
INNER JOIN 두 테이블에서 조건에 일치하는 레코드만 반환
LEFT JOIN 왼쪽 테이블의 모든 레코드 + 조건에 일치하는 오른쪽 테이블
RIGHT JOIN 오른쪽 테이블의 모든 레코드 + 조건에 일치하는 왼쪽 테이블

2. INNER JOIN

✅ 조건에 일치하는 공통된 데이터만 반환

SELECT *
FROM Reservation
INNER JOIN Customer
ON Reservation.Name = Customer.Name;
  • Reservation.NameCustomer.Name이 같은 레코드만 조회

3. LEFT JOIN

✅ 왼쪽 테이블은 모두 반환, 오른쪽 테이블은 일치하는 경우만

SELECT *
FROM Reservation
LEFT JOIN Customer
ON Reservation.Name = Customer.Name
WHERE ReserveDate > '2016-02-01';
  • 예약 정보는 모두 출력
  • 일치하는 고객 정보가 없으면 NULL 표시

4. RIGHT JOIN

✅ 오른쪽 테이블은 모두 반환, 왼쪽 테이블은 일치하는 경우만

SELECT *
FROM Reservation
RIGHT JOIN Customer
ON Reservation.Name = Customer.Name;
  • 모든 고객 정보를 조회하고
  • 예약과 연결되지 않은 고객도 표시됨

5. JOIN 고급 활용 팁

5.1. 여러 테이블 JOIN

SELECT *
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.ID
LEFT JOIN Products ON Orders.ProductID = Products.ID;
  • 고객과 주문 정보는 반드시 일치해야 하고
  • 제품 정보는 있는 경우에만 표시

5.2. 별칭(Alias) 사용

SELECT *
FROM Reservation AS r
INNER JOIN Customer AS c
ON r.Name = c.Name;

코드 간결성과 가독성 향상


5.3. WHERE vs JOIN

-- JOIN: 관계 정의
-- WHERE: 결과 필터링

SELECT *
FROM Reservation r
INNER JOIN Customer c
ON r.Name = c.Name
WHERE r.ReserveDate > '2016-02-01';

5.4. SELF JOIN

SELECT a.ID, b.ID
FROM Employees a
INNER JOIN Employees b
ON a.ManagerID = b.ID;
  • 동일한 테이블끼리 비교

6. JOIN 벤 다이어그램으로 이해하기

  • INNER JOIN: A ∩ B (공통된 부분만)
  • LEFT JOIN: A 전체 + A∩B
  • RIGHT JOIN: B 전체 + A∩B

7. JOIN 비교 요약

JOIN 종류 조건 일치 필수 NULL 포함 반환 결과
INNER JOIN O X 일치하는 데이터만
LEFT JOIN O O 왼쪽 테이블 전부 + 일치 데이터
RIGHT JOIN O O 오른쪽 테이블 전부 + 일치 데이터

8. 실전 예제

8.1. 고객별 주문 내역

SELECT o.OrderID, c.Name, o.OrderDate
FROM Orders o
INNER JOIN Customers c
ON o.CustomerID = c.ID;

고객이 주문한 내역 조회


8.2. 예약 정보 + 고객 이름

SELECT r.ID, r.ReserveDate, c.Name
FROM Reservation r
LEFT JOIN Customer c
ON r.CustomerID = c.ID;

예약은 모두 출력되며, 고객 정보가 없으면 NULL


8.3. 모든 상품 + 주문 여부

SELECT p.ProductName, o.Quantity
FROM Orders o
RIGHT JOIN Products p
ON o.ProductID = p.ID;

주문이 없는 상품도 포함해서 출력


질문 정리

1. JOIN은 몇 개의 테이블까지 연결할 수 있나요?

→ 이론적으로 제한 없음, 하지만 성능 고려 필요.

2. INNER JOIN과 WHERE 조건이 겹치는 경우?

ON은 테이블 간 조건, WHERE는 결과 필터링입니다.

3. LEFT JOIN에서 NULL은 어떤 의미인가요?

→ 연결된 테이블에 해당 레코드가 없다는 뜻입니다.

4. JOIN이 느려요. 어떻게 해야 하나요?

JOIN 조건 필드에 인덱스 추가, 필요한 필드만 SELECT로 속도 개선 가능.


요약

  • JOIN은 관계형 데이터베이스의 핵심 도구
  • INNER JOIN: 공통된 데이터만 조회
  • LEFT JOIN: 왼쪽 테이블은 모두 출력
  • RIGHT JOIN: 오른쪽 테이블은 모두 출력
  • Alias, WHERE절, SELF JOIN 등과 함께 사용하면 유연한 데이터 조회 가능

JOIN을 잘 다루면 SQL 질의의 수준이 확 올라갑니다!

카테고리:

업데이트:

댓글남기기