[DB] 데이터베이스 개념노트 11편 - JOIN

데이터베이스 개념노트 11편 - JOIN

지난 글에서는 여러 행을 그룹으로 묶어 계산하는 GROUP BY, HAVING, 집계 함수에 대해 정리했습니다.

이번 글에서는 SQLD에서 매우 중요하게 다루는 JOIN에 대해 정리해 보겠습니다.

JOIN은 여러 테이블에 나누어 저장된 데이터를 하나의 결과로 함께 조회할 때 사용하는 SQL 문법입니다. 관계형 데이터베이스에서는 정규화를 통해 데이터를 여러 테이블로 나누어 저장하기 때문에, 실제로 원하는 정보를 조회하려면 JOIN을 자주 사용하게 됩니다.


1. JOIN이란?

JOIN은 두 개 이상의 테이블을 연결하여 데이터를 조회하는 방법입니다.

JOIN은 서로 관계가 있는 테이블들을 연결하여 필요한 데이터를 함께 조회하는 SQL 문법이다.

예를 들어 주문 테이블에는 회원번호만 저장되어 있고, 회원 이름은 회원 테이블에 저장되어 있다고 해보겠습니다. 이때 주문 정보와 회원 이름을 함께 보고 싶다면 회원 테이블과 주문 테이블을 JOIN해야 합니다.


2. JOIN이 필요한 이유

관계형 데이터베이스에서는 데이터 중복을 줄이기 위해 정보를 여러 테이블로 나누어 저장합니다. 예를 들어 쇼핑몰 데이터베이스는 다음과 같이 나눌 수 있습니다.

  • 회원 테이블 : 회원 정보 저장
  • 상품 테이블 : 상품 정보 저장
  • 주문 테이블 : 주문 기본 정보 저장
  • 주문상세 테이블 : 주문한 상품 정보 저장

이렇게 나누어 저장하면 데이터 중복은 줄어들지만, 화면에서 주문번호, 회원명, 상품명, 주문금액을 한 번에 보여주려면 여러 테이블을 연결해야 합니다. 이때 사용하는 것이 JOIN입니다.


3. 예제 테이블

이번 글에서는 다음 테이블을 기준으로 JOIN 예제를 살펴보겠습니다.

회원 테이블

회원번호 회원명 회원등급
M001 김지훈 골드
M002 이수진 실버
M003 박민수 일반
M004 최유진 골드

주문 테이블

주문번호 회원번호 주문일자 주문금액
O001 M001 2026-01-10 30000
O002 M001 2026-01-12 15000
O003 M002 2026-01-15 120000
O004 M005 2026-02-01 80000

회원 테이블에는 M001, M002, M003, M004 회원이 있습니다. 주문 테이블에는 M001, M002, M005 회원의 주문이 있습니다. 여기서 M005는 회원 테이블에는 없는 회원번호라고 가정하겠습니다.


4. JOIN의 기본 원리

JOIN은 두 테이블 사이의 공통된 컬럼을 기준으로 행을 연결합니다.

회원 테이블과 주문 테이블에서는 회원번호가 공통 컬럼입니다.

회원.회원번호 = 주문.회원번호

이 조건을 기준으로 회원과 주문을 연결하면, 어떤 회원이 어떤 주문을 했는지 함께 조회할 수 있습니다.


5. INNER JOIN

INNER JOIN은 두 테이블에서 JOIN 조건이 일치하는 데이터만 조회합니다.

INNER JOIN은 양쪽 테이블에 모두 매칭되는 데이터만 조회하는 JOIN이다.

회원 테이블과 주문 테이블을 회원번호 기준으로 INNER JOIN 해보겠습니다.

SELECT M.회원번호,
       M.회원명,
       O.주문번호,
       O.주문금액
FROM 회원 M
INNER JOIN 주문 O
  ON M.회원번호 = O.회원번호;

위 SQL은 회원번호가 양쪽 테이블에 모두 존재하는 데이터만 조회합니다.

회원번호 회원명 주문번호 주문금액
M001 김지훈 O001 30000
M001 김지훈 O002 15000
M002 이수진 O003 120000

M003, M004 회원은 주문이 없으므로 결과에 나오지 않습니다. O004 주문의 M005 회원번호는 회원 테이블에 없으므로 결과에 나오지 않습니다.


6. INNER JOIN의 다른 표현

INNER JOIN은 다음처럼 JOIN이라고만 작성해도 같은 의미로 동작합니다.

SELECT M.회원번호,
       M.회원명,
       O.주문번호,
       O.주문금액
FROM 회원 M
JOIN 주문 O
  ON M.회원번호 = O.회원번호;

즉, 일반적으로 JOIN이라고만 쓰면 INNER JOIN을 의미합니다.


7. 테이블 별칭

JOIN을 사용할 때는 테이블명이 길어질 수 있으므로 보통 별칭을 사용합니다.

FROM 회원 M
JOIN 주문 O
  ON M.회원번호 = O.회원번호

위 예시에서 M은 회원 테이블의 별칭이고, O는 주문 테이블의 별칭입니다.

별칭 의미
M 회원 테이블
O 주문 테이블

별칭을 사용하면 SELECT절이나 ON절에서 컬럼이 어느 테이블의 컬럼인지 명확하게 표현할 수 있습니다.


8. 컬럼명이 중복될 때

두 테이블에 같은 이름의 컬럼이 있을 때는 반드시 어느 테이블의 컬럼인지 지정해야 합니다.

예를 들어 회원 테이블과 주문 테이블에 모두 회원번호 컬럼이 있습니다. 이때 단순히 회원번호라고만 쓰면 어떤 테이블의 회원번호인지 모호할 수 있습니다.

SELECT 회원번호
FROM 회원 M
JOIN 주문 O
  ON M.회원번호 = O.회원번호;

위 SQL은 모호할 수 있습니다. 따라서 다음처럼 테이블 별칭을 붙여주는 것이 좋습니다.

SELECT M.회원번호,
       M.회원명,
       O.주문번호
FROM 회원 M
JOIN 주문 O
  ON M.회원번호 = O.회원번호;

9. OUTER JOIN

OUTER JOIN은 JOIN 조건에 일치하지 않는 데이터도 함께 조회할 때 사용합니다.

OUTER JOIN은 한쪽 테이블 또는 양쪽 테이블에서 매칭되지 않는 데이터까지 포함하여 조회하는 JOIN이다.

OUTER JOIN은 크게 다음 세 가지로 나눌 수 있습니다.

  • LEFT OUTER JOIN
  • RIGHT OUTER JOIN
  • FULL OUTER JOIN

10. LEFT OUTER JOIN

LEFT OUTER JOIN은 왼쪽 테이블의 데이터는 모두 조회하고, 오른쪽 테이블은 JOIN 조건에 맞는 데이터만 연결합니다.

LEFT OUTER JOIN은 왼쪽 테이블을 기준으로 모든 데이터를 조회한다.

회원 테이블을 기준으로 주문 정보를 함께 조회해 보겠습니다.

SELECT M.회원번호,
       M.회원명,
       O.주문번호,
       O.주문금액
FROM 회원 M
LEFT OUTER JOIN 주문 O
  ON M.회원번호 = O.회원번호;

위 SQL은 회원 테이블의 모든 회원을 조회하고, 주문이 있는 회원은 주문 정보도 함께 보여줍니다. 주문이 없는 회원은 주문 관련 컬럼이 NULL로 표시됩니다.

회원번호 회원명 주문번호 주문금액
M001 김지훈 O001 30000
M001 김지훈 O002 15000
M002 이수진 O003 120000
M003 박민수 NULL NULL
M004 최유진 NULL NULL

M003, M004 회원은 주문이 없지만 왼쪽 테이블인 회원을 기준으로 조회했기 때문에 결과에 포함됩니다.


11. RIGHT OUTER JOIN

RIGHT OUTER JOIN은 오른쪽 테이블의 데이터는 모두 조회하고, 왼쪽 테이블은 JOIN 조건에 맞는 데이터만 연결합니다.

RIGHT OUTER JOIN은 오른쪽 테이블을 기준으로 모든 데이터를 조회한다.

SELECT M.회원번호,
       M.회원명,
       O.주문번호,
       O.주문금액
FROM 회원 M
RIGHT OUTER JOIN 주문 O
  ON M.회원번호 = O.회원번호;

위 SQL은 주문 테이블의 모든 주문을 조회합니다. 회원 테이블에 매칭되는 회원이 있으면 회원명이 표시되고, 매칭되는 회원이 없으면 회원 관련 컬럼이 NULL로 표시됩니다.

회원번호 회원명 주문번호 주문금액
M001 김지훈 O001 30000
M001 김지훈 O002 15000
M002 이수진 O003 120000
NULL NULL O004 80000

O004 주문은 회원번호가 M005이지만 회원 테이블에 M005가 없으므로 회원 정보가 NULL로 표시됩니다.


12. FULL OUTER JOIN

FULL OUTER JOIN은 양쪽 테이블의 모든 데이터를 조회하고, 매칭되는 데이터는 연결하고 매칭되지 않는 데이터는 NULL로 표시합니다.

FULL OUTER JOIN은 왼쪽과 오른쪽 테이블의 모든 데이터를 포함한다.

SELECT M.회원번호,
       M.회원명,
       O.주문번호,
       O.주문금액
FROM 회원 M
FULL OUTER JOIN 주문 O
  ON M.회원번호 = O.회원번호;

FULL OUTER JOIN은 양쪽의 미매칭 데이터까지 모두 보고 싶을 때 사용합니다.

  • 주문이 있는 회원
  • 주문이 없는 회원
  • 회원 정보가 없는 주문

위 세 가지가 모두 결과에 포함될 수 있습니다.


13. OUTER JOIN 한 번에 정리

JOIN 종류 기준 포함되는 데이터
LEFT OUTER JOIN 왼쪽 테이블 왼쪽 전체 + 오른쪽 매칭 데이터
RIGHT OUTER JOIN 오른쪽 테이블 오른쪽 전체 + 왼쪽 매칭 데이터
FULL OUTER JOIN 양쪽 테이블 왼쪽 전체 + 오른쪽 전체

14. WHERE 조건과 OUTER JOIN 주의사항

OUTER JOIN을 사용할 때 WHERE 조건의 위치를 주의해야 합니다. 잘못 작성하면 OUTER JOIN이 INNER JOIN처럼 동작할 수 있습니다.

예를 들어 회원 전체를 조회하면서 주문금액이 50000 이상인 주문만 보고 싶다고 해보겠습니다.

SELECT M.회원번호,
       M.회원명,
       O.주문번호,
       O.주문금액
FROM 회원 M
LEFT OUTER JOIN 주문 O
  ON M.회원번호 = O.회원번호
WHERE O.주문금액 >= 50000;

위 SQL은 WHERE절에서 주문금액 조건을 검사합니다. 그런데 주문이 없는 회원은 O.주문금액이 NULL입니다. NULL은 50000 이상 조건을 만족하지 않으므로 결과에서 제외됩니다.

즉, LEFT OUTER JOIN을 했지만 주문이 없는 회원이 사라질 수 있습니다.


15. ON절 조건과 WHERE절 조건의 차이

OUTER JOIN에서 오른쪽 테이블의 조건을 유지하면서 왼쪽 테이블 전체를 보고 싶다면, 조건을 ON절에 작성하는 방식을 고려할 수 있습니다.

SELECT M.회원번호,
       M.회원명,
       O.주문번호,
       O.주문금액
FROM 회원 M
LEFT OUTER JOIN 주문 O
  ON M.회원번호 = O.회원번호
 AND O.주문금액 >= 50000;

위 SQL은 회원 테이블의 모든 회원을 유지하면서, 주문 테이블에서는 주문금액이 50000 이상인 주문만 연결합니다.

조건 위치 의미
ON절 JOIN할 때 연결 조건으로 사용
WHERE절 JOIN 결과가 만들어진 뒤 최종 행 필터링

SQLD에서는 OUTER JOIN에서 조건 위치에 따라 결과가 달라질 수 있다는 점을 꼭 기억해야 합니다.


16. CROSS JOIN

CROSS JOIN은 두 테이블의 모든 행을 서로 조합하는 JOIN입니다. 이를 카티션 곱 또는 Cartesian Product라고도 합니다.

CROSS JOIN은 한 테이블의 모든 행과 다른 테이블의 모든 행을 전부 조합하는 JOIN이다.

SELECT M.회원명,
       O.주문번호
FROM 회원 M
CROSS JOIN 주문 O;

회원 테이블에 4개 행, 주문 테이블에 4개 행이 있다면 결과는 4 × 4 = 16개 행이 됩니다.

CROSS JOIN은 의도적으로 사용할 때도 있지만, JOIN 조건을 빠뜨렸을 때 실수로 발생할 수 있으므로 주의해야 합니다.


17. JOIN 조건 누락 주의

다음처럼 두 테이블을 FROM절에 함께 작성했지만 JOIN 조건이 없다면 모든 조합이 만들어질 수 있습니다.

SELECT M.회원명,
       O.주문번호
FROM 회원 M, 주문 O;

이 SQL은 회원과 주문을 연결하는 조건이 없기 때문에 CROSS JOIN처럼 동작할 수 있습니다.

따라서 여러 테이블을 조회할 때는 반드시 JOIN 조건이 올바르게 작성되었는지 확인해야 합니다.


18. SELF JOIN

SELF JOIN은 하나의 테이블을 자기 자신과 JOIN하는 방식입니다.

SELF JOIN은 같은 테이블을 서로 다른 별칭으로 두 번 사용하여 자기 자신과 연결하는 JOIN이다.

예를 들어 사원 테이블에 사원번호와 관리자번호가 있다고 해보겠습니다. 관리자도 사원이므로 같은 사원 테이블 안에서 찾을 수 있습니다.

사원번호 사원명 관리자번호
E001 김부장 NULL
E002 이대리 E001
E003 박사원 E002

사원명과 관리자명을 함께 조회하려면 SELF JOIN을 사용할 수 있습니다.

SELECT E.사원명 AS 사원명,
       M.사원명 AS 관리자명
FROM 사원 E
LEFT OUTER JOIN 사원 M
  ON E.관리자번호 = M.사원번호;

같은 사원 테이블을 E와 M이라는 별칭으로 나누어 사용했습니다. E는 사원 역할, M은 관리자 역할입니다.


19. EQUI JOIN

EQUI JOIN은 등호 조건을 사용하여 테이블을 연결하는 JOIN입니다.

SELECT M.회원명,
       O.주문번호
FROM 회원 M
JOIN 주문 O
  ON M.회원번호 = O.회원번호;

위 SQL은 회원번호가 같은 행끼리 연결하므로 EQUI JOIN입니다. 실무에서 가장 자주 사용하는 JOIN 방식입니다.


20. NON-EQUI JOIN

NON-EQUI JOIN은 등호가 아닌 비교 조건을 사용하여 테이블을 연결하는 JOIN입니다.

예를 들어 점수에 따라 등급을 매기는 테이블이 있다고 해보겠습니다.

등급 최소점수 최대점수
A 90 100
B 80 89
C 70 79

학생 점수가 어느 등급 범위에 속하는지 조회할 때는 BETWEEN을 사용한 NON-EQUI JOIN을 할 수 있습니다.

SELECT S.학생명,
       S.점수,
       G.등급
FROM 학생 S
JOIN 등급 G
  ON S.점수 BETWEEN G.최소점수 AND G.최대점수;

이처럼 등호가 아닌 범위 조건으로 연결하는 JOIN을 NON-EQUI JOIN이라고 합니다.


21. NATURAL JOIN

NATURAL JOIN은 두 테이블에서 이름이 같은 컬럼을 자동으로 찾아 JOIN하는 방식입니다.

SELECT 회원번호,
       회원명,
       주문번호
FROM 회원
NATURAL JOIN 주문;

회원 테이블과 주문 테이블에 회원번호라는 같은 이름의 컬럼이 있다면, NATURAL JOIN은 해당 컬럼을 기준으로 자동으로 JOIN합니다.

하지만 같은 이름의 컬럼이 여러 개 있거나 의도하지 않은 컬럼이 자동으로 JOIN 조건에 포함될 수 있으므로 주의해야 합니다. 실무에서는 명확한 ON절을 사용하는 것이 더 안전합니다.


22. USING절

USING은 두 테이블에서 JOIN 기준 컬럼명이 같을 때 사용할 수 있습니다.

SELECT 회원번호,
       M.회원명,
       O.주문번호
FROM 회원 M
JOIN 주문 O
USING (회원번호);

USING절은 양쪽 테이블에 같은 이름으로 존재하는 컬럼을 기준으로 JOIN합니다.

ON절을 사용하면 다음과 같습니다.

SELECT M.회원번호,
       M.회원명,
       O.주문번호
FROM 회원 M
JOIN 주문 O
  ON M.회원번호 = O.회원번호;

USING은 간단하지만, JOIN 조건을 명확히 보여주려면 ON절이 더 직관적일 수 있습니다.


23. ANSI JOIN과 Oracle 전통 JOIN

JOIN 문법은 크게 ANSI 표준 JOIN 방식과 Oracle 전통 JOIN 방식으로 볼 수 있습니다.

ANSI JOIN

SELECT M.회원명,
       O.주문번호
FROM 회원 M
JOIN 주문 O
  ON M.회원번호 = O.회원번호;

Oracle 전통 JOIN

SELECT M.회원명,
       O.주문번호
FROM 회원 M, 주문 O
WHERE M.회원번호 = O.회원번호;

두 SQL은 INNER JOIN 관점에서는 같은 결과를 낼 수 있습니다. 하지만 ANSI JOIN은 JOIN 조건과 일반 WHERE 조건을 구분해서 작성할 수 있어 가독성이 좋습니다.


24. Oracle OUTER JOIN 기호 (+)

Oracle 전통 JOIN에서는 OUTER JOIN을 표현할 때 (+) 기호를 사용할 수 있습니다.

회원 테이블을 기준으로 주문 정보를 조회하는 LEFT OUTER JOIN은 ANSI 문법으로 다음과 같습니다.

SELECT M.회원번호,
       M.회원명,
       O.주문번호
FROM 회원 M
LEFT OUTER JOIN 주문 O
  ON M.회원번호 = O.회원번호;

Oracle 전통 문법으로는 다음처럼 표현할 수 있습니다.

SELECT M.회원번호,
       M.회원명,
       O.주문번호
FROM 회원 M, 주문 O
WHERE M.회원번호 = O.회원번호(+);

여기서 (+)는 데이터가 부족한 쪽, 즉 NULL이 채워질 수 있는 쪽에 붙습니다.

Oracle 전통 OUTER JOIN에서 (+)는 NULL이 발생할 수 있는 테이블 쪽에 붙습니다.


25. 세 개 이상의 테이블 JOIN

실무에서는 두 개가 아니라 세 개 이상의 테이블을 JOIN하는 경우가 많습니다.

예를 들어 주문번호, 회원명, 상품명을 함께 조회하려면 회원, 주문, 주문상세, 상품 테이블을 JOIN할 수 있습니다.

SELECT M.회원명,
       O.주문번호,
       P.상품명,
       D.주문수량
FROM 회원 M
JOIN 주문 O
  ON M.회원번호 = O.회원번호
JOIN 주문상세 D
  ON O.주문번호 = D.주문번호
JOIN 상품 P
  ON D.상품번호 = P.상품번호;

JOIN은 관계를 따라 연결하는 방식입니다.

  • 회원과 주문은 회원번호로 연결
  • 주문과 주문상세는 주문번호로 연결
  • 주문상세와 상품은 상품번호로 연결

26. JOIN과 GROUP BY 함께 사용하기

JOIN한 결과를 GROUP BY로 묶어 집계할 수도 있습니다.

예를 들어 회원별 총 주문금액을 구해보겠습니다.

SELECT M.회원번호,
       M.회원명,
       SUM(O.주문금액) AS 총주문금액
FROM 회원 M
JOIN 주문 O
  ON M.회원번호 = O.회원번호
GROUP BY M.회원번호, M.회원명;

회원과 주문을 JOIN한 뒤, 회원별로 그룹을 묶어 주문금액 합계를 계산합니다.

주문이 없는 회원까지 포함하고 싶다면 LEFT OUTER JOIN을 사용할 수 있습니다.

SELECT M.회원번호,
       M.회원명,
       NVL(SUM(O.주문금액), 0) AS 총주문금액
FROM 회원 M
LEFT OUTER JOIN 주문 O
  ON M.회원번호 = O.회원번호
GROUP BY M.회원번호, M.회원명;

주문이 없는 회원은 SUM 결과가 NULL일 수 있으므로 NVL로 0 처리할 수 있습니다.


27. JOIN 실행 흐름 이해하기

JOIN이 포함된 SELECT문은 대략 다음 흐름으로 이해할 수 있습니다.

순서 구문 역할
1 FROM / JOIN 조회할 테이블들을 연결
2 ON JOIN 조건 적용
3 WHERE JOIN 결과에서 행 필터링
4 GROUP BY 그룹화
5 HAVING 그룹 조건 필터링
6 SELECT 조회할 컬럼 선택
7 ORDER BY 최종 결과 정렬

정확한 DBMS 내부 실행 계획은 옵티마이저가 결정하지만, SQLD 학습 단계에서는 논리적인 실행 흐름을 이해하는 것이 중요합니다.


28. JOIN에서 자주 하는 실수

JOIN을 사용할 때 자주 하는 실수는 다음과 같습니다.

실수 주의할 점
JOIN 조건을 빠뜨림 CROSS JOIN처럼 모든 조합이 만들어질 수 있음
같은 이름의 컬럼에 테이블 별칭을 붙이지 않음 어느 테이블의 컬럼인지 모호해질 수 있음
OUTER JOIN 후 WHERE 조건을 잘못 작성함 미매칭 데이터가 제거되어 INNER JOIN처럼 될 수 있음
LEFT JOIN과 RIGHT JOIN 기준을 헷갈림 LEFT는 왼쪽 기준, RIGHT는 오른쪽 기준
NATURAL JOIN을 무심코 사용함 같은 이름의 컬럼이 자동으로 JOIN 조건에 포함됨

29. JOIN 종류 한 번에 정리

JOIN 종류 설명 핵심
INNER JOIN 양쪽 테이블에서 조건이 일치하는 행만 조회 매칭 데이터만
LEFT OUTER JOIN 왼쪽 테이블 전체와 오른쪽 매칭 데이터 조회 왼쪽 기준
RIGHT OUTER JOIN 오른쪽 테이블 전체와 왼쪽 매칭 데이터 조회 오른쪽 기준
FULL OUTER JOIN 양쪽 테이블의 모든 데이터 조회 양쪽 전체
CROSS JOIN 모든 행 조합 생성 카티션 곱
SELF JOIN 같은 테이블을 자기 자신과 JOIN 별칭 필수
NATURAL JOIN 같은 이름의 컬럼을 자동으로 JOIN 자동 연결

30. SQLD 관점에서 꼭 기억할 내용

이번 글에서 SQLD 공부를 위해 꼭 기억해야 할 내용은 다음과 같습니다.

  • JOIN은 두 개 이상의 테이블을 연결하여 조회하는 문법이다.
  • INNER JOIN은 양쪽 테이블에 모두 매칭되는 데이터만 조회한다.
  • LEFT OUTER JOIN은 왼쪽 테이블의 모든 데이터를 포함한다.
  • RIGHT OUTER JOIN은 오른쪽 테이블의 모든 데이터를 포함한다.
  • FULL OUTER JOIN은 양쪽 테이블의 모든 데이터를 포함한다.
  • CROSS JOIN은 두 테이블의 모든 행 조합을 만든다.
  • SELF JOIN은 같은 테이블을 서로 다른 별칭으로 JOIN한다.
  • JOIN 조건을 빠뜨리면 원하지 않는 카티션 곱이 발생할 수 있다.
  • OUTER JOIN에서는 조건을 ON절에 둘지 WHERE절에 둘지에 따라 결과가 달라질 수 있다.
  • NATURAL JOIN은 같은 이름의 컬럼을 자동으로 JOIN하므로 주의해야 한다.
  • Oracle 전통 OUTER JOIN의 (+)는 NULL이 발생할 수 있는 쪽에 붙는다.

31. 핵심 요약

개념 핵심 내용
JOIN 여러 테이블을 연결하여 데이터를 조회하는 방법
INNER JOIN JOIN 조건에 일치하는 데이터만 조회
OUTER JOIN 매칭되지 않는 데이터도 포함하여 조회
LEFT OUTER JOIN 왼쪽 테이블 기준 전체 조회
RIGHT OUTER JOIN 오른쪽 테이블 기준 전체 조회
FULL OUTER JOIN 양쪽 테이블 전체 조회
CROSS JOIN 모든 행의 조합을 생성
SELF JOIN 하나의 테이블을 자기 자신과 연결
EQUI JOIN 등호 조건으로 연결하는 JOIN
NON-EQUI JOIN 등호가 아닌 조건으로 연결하는 JOIN

32. 마무리

이번 글에서는 여러 테이블을 함께 조회하는 JOIN에 대해 정리했습니다.

JOIN은 관계형 데이터베이스에서 매우 중요한 개념입니다. 정규화를 통해 데이터가 여러 테이블로 나뉘어 저장되기 때문에, 실제 업무에서 필요한 정보를 조회하려면 테이블 간 관계를 이해하고 JOIN을 사용할 수 있어야 합니다.

SQLD에서는 INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN의 차이를 잘 구분해야 합니다. 특히 OUTER JOIN에서는 조건의 위치에 따라 결과가 달라질 수 있으므로 주의해야 합니다.

다음 글에서는 SQL에서 데이터를 추가, 수정, 삭제하는 INSERT, UPDATE, DELETE에 대해 정리해 보겠습니다.