📘 SQLD – JOIN문
1️⃣ JOIN이란?
- JOIN은 두 개 이상의 테이블에서 키 컬럼(예: PK·FK) 기준으로 데이터를 결합하여 하나의 결과집합으로 조회하는 기법입니다.
- 여러 테이블에 흩어진 정보를 하나로 합쳐 종합적인 데이터 조회나 분석이 가능하게 해줍니다.
- SQLD 시험은 물론, 실무에서도 가장 많이 사용하는 JOIN 관련 문법입니다.
2️⃣ JOIN 유형과 용도
INNER JOIN | 두 테이블 모두 매칭되는 행만 반환 | 주문-고객 테이블에서 주문 기록 조회 |
LEFT OUTER JOIN | 왼쪽 테이블 전체 + 오른쪽 매칭된 행 (없으면 NULL) | 고객 리스트에서 미구매 고객 포함 조회 |
RIGHT OUTER JOIN | 오른쪽 테이블 전체 + 왼쪽 매칭된 행 | 드물게 사용됨 (RIGHT 대신 LEFT 활용 권장) |
FULL OUTER JOIN | 양쪽 모든 행 포함, 매칭 없으면 NULL | 양쪽 모두 포함한 통합 보고서 |
CROSS JOIN | 두 테이블의 모든 조합 생성 (카티션 곱) | 모든 상품 × 모든 색상 조합 생성 |
SELF JOIN | 동일 테이블끼리 조인 (자기참조) | 직원-관리자 관계 조회 등 |
3️⃣ JOIN 기본 문법
SELECT A.col1, B.col2, ...
FROM tableA AS A
[INNER | LEFT | RIGHT | FULL OUTER | CROSS] JOIN tableB AS B
ON A.key = B.key
[WHERE 추가조건]
[ORDER BY ...];
- AS: 별칭(alias)을 지정하여 가독성 UP
- ON: 두 테이블의 연결 기준 지정 (JOIN 기준)
- WHERE: JOIN 이후 결과 전체에 대한 추가 필터링
4️⃣ 각 JOIN 결과 차이 요약
- INNER JOIN: 교집합
- LEFT OUTER JOIN: 왼쪽 전체 + 교집합
- RIGHT OUTER JOIN: 오른쪽 전체 + 교집합
- FULL OUTER JOIN: 합집합 (매칭 없는 행도 포함)
- CROSS JOIN: 데카르트 곱 (모든 조합)
- SELF JOIN: 자기 자신 조합 → 특정 관계 분석
5️⃣ 대표 실무 예시 쿼리
✅ INNER JOIN
SELECT o.id AS order_id, c.name AS customer_name
FROM orders o
INNER JOIN customers c ON o.customer_id = c.id;
✅ LEFT JOIN
SELECT u.name, a.address
FROM users u
LEFT JOIN addresses a ON u.id = a.user_id; -- 주소 없는 사용자도 결과에 포함
✅ FULL OUTER JOIN
SELECT A.*, B.*
FROM A FULL OUTER JOIN B ON A.id = B.id; -- 둘 다 없는 데이터일 경우 NULL 포함
✅ CROSS JOIN
SELECT *
FROM colors CROSS JOIN shapes; -- 모든 색상 × 도형 조합 생성
✅ SELF JOIN
SELECT e1.name AS employee, e2.name AS manager
FROM employee e1
INNER JOIN employee e2 ON e1.manager_id = e2.id;
6️⃣ 실무 & SQLD 시험 대비 팁
- INNER vs OUTER의 포함 기준 철저히 구분
- LEFT/RIGHT는 테이블 배치(위치)에 따라 결과 다름 → 실습 필요
- CROSS JOIN은 조건 없다면 조심: 폭발적 결과 수!
- SELF JOIN은 같은 테이블에서 다른 역할의 데이터 조인 시 유용
- WHERE절은 JOIN 후 조건 적용, ON절은 조인 기준 → 둘 차이 명확히 이해
7️⃣ 실행 순서 이해
FROM → JOIN … ON … → WHERE → SELECT → ORDER BY
- 작성 순서와 실행 순서가 일치하지 않으니, 전체 쿼리 흐름 이해 필수
'SQLD > 2과목 : SQL 기본 및 활용' 카테고리의 다른 글
2.9 복합 쿼리 예제 2 (2) | 2025.07.03 |
---|---|
2.8 복합 쿼리 예제 1 (1) | 2025.07.03 |
2.6 GROUP BY 절 (0) | 2025.06.24 |
2.5 WHERE 절 (1) | 2025.06.24 |
2.4 NULL 함수 (0) | 2025.06.24 |