AYSTORY

LEFT OUTER JOIN 뒤 WHERE 절 본문

SQLD

LEFT OUTER JOIN 뒤 WHERE 절

bye0nzn 2025. 8. 19. 14:11

 

📌 기본 해석 순서

  1. FROM … LEFT OUTER JOIN … ON …
    → 조인 조건(ON)대로 두 테이블을 붙임.
    → 매칭 안 되면 오른쪽 테이블 컬럼이 NULL 채워짐.
  2. 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 절에 조건을 넣어야 함.