AYSTORY
LEFT OUTER JOIN 뒤 WHERE 절 본문
📌 기본 해석 순서
- FROM … LEFT OUTER JOIN … ON …
→ 조인 조건(ON)대로 두 테이블을 붙임.
→ 매칭 안 되면 오른쪽 테이블 컬럼이 NULL 채워짐. - WHERE …
→ 최종 결과에서 행(row)을 걸러냄.
→ 이때 NULL도 비교 대상이 되므로, 조심하지 않으면 LEFT JOIN 효과가 사라지고 사실상 INNER JOIN처럼 동작할 수 있음.
📌 예시
데이터
DEPT
| DEPTNO | DNAME |
| 10 | ACCOUNTING |
| 20 | RESEARCH |
| 30 | SALES |
| 40 | OPERATIONS |
EMP
| ENAME | DEPTNO |
| SMITH | 20 |
| ALLEN | 30 |
쿼리 1: LEFT OUTER JOIN만 사용
SELECT D.DEPTNO, D.DNAME, E.ENAME
FROM DEPT D
LEFT JOIN EMP E
ON D.DEPTNO = E.DEPTNO;
👉 결과: 모든 부서가 나오고, EMP 없는 부서는 ENAME = NULL
| DEPTNO | DNAME | ENAME |
| 10 | ACCOUNTING | NULL |
| 20 | RESEARCH | SMITH |
| 30 | SALES | ALLEN |
| 40 | OPERATIONS | NULL |
쿼리 2: WHERE 절 추가
SELECT D.DEPTNO, D.DNAME, E.ENAME
FROM DEPT D
LEFT JOIN EMP E
ON D.DEPTNO = E.DEPTNO
WHERE E.ENAME IS NOT NULL;
👉 WHERE E.ENAME IS NOT NULL 조건 때문에, 사원이 없는 부서는 제외됨 → 결과는 사실상 INNER JOIN
| DEPTNO | DNAME | ENAME |
| 20 | RESEARCH | SMITH |
| 30 | SALES | ALLEN |
📌 핵심 포인트
- ON 절 조건: 조인 시점에 적용 → LEFT JOIN 보존 효과 유지
- WHERE 절 조건: 조인 결과에 적용 → NULL 걸러지면 LEFT JOIN 효과 사라짐
✅ 정리
- LEFT JOIN … ON … → 기준 테이블의 모든 행을 유지 (NULL 허용)
- WHERE에서 오른쪽 테이블 컬럼 조건을 걸면 → NULL이 걸러져서 INNER JOIN처럼 됨
- 따라서 “사원이 없는 부서도 보고 싶다”면 → WHERE에서 필터링하지 말고, ON 절에 조건을 넣어야 함.
'SQLD' 카테고리의 다른 글
| WHERE not exists (0) | 2025.08.19 |
|---|---|
| 사원이 없는 부서도 포함하려면? LEFT OUTER JOIN (0) | 2025.08.19 |
| LEFT OUTER JOIN의 조건절 활용 예시: 고객번호 필터링 (0) | 2025.08.19 |
| USING 쓸 때 ALIAS 사용 (0) | 2025.08.19 |
| ORACLE과 SQL Server에서의 차이 (2) | 2025.08.19 |
