[SQL] 태이블 차집합 구하기 by LEFT JOIN

Gi Woon Lee·2025년 3월 14일

SQL

목록 보기
27/33


테이블A테이블B가 있을 때 A에만 있는데이터를 조회하고 싶다면 차집합 개념을 사용하면 된다.

  • 오라클SQL에는 MINUS연산자를 통해 아주 간단하게 차집합을 구할 수 있다.
SELECT column1, column2 FROM table1 
MINUS
SELECT column1, column2 FROM table2
  • 하지만 mySQL 에는 MINUS연산자가 없기에 LEFT JOINIS NULL 필터링을 사용해야 한다.
SELECT
    INS.NAME
FROM
    table1 as t1 LEFT JOIN table2 as t2
    ON t1.column1 = t2.column2
"""
LEFT JOIN 했을 때 오른쪽 테이블이 NULL인 부분이 왼쪽 테이블에만 있는 데이터니까 
WHERE 절 IS NULL 필터링을 통해 ORACLE SQL의 MINUS 성능을 구현한다.
"""
WHERE t2.column2 IS NULL 

    

동물 보호소 테이블 예시

"동물 보호 시작테이블과 동물 보호 종료테이블이 있다. 계속 보호중인 동물의 ID와 보호 시작 날짜를 조회하라"

  • 동물 보호 시작 테이블
IDIN_DATE
A012024-01-01
A022024-01-03
A032024-01-05
A042024-01-07
A052024-01-10
A062024-01-12
A072024-01-15
A082024-01-17
A092024-01-20
A102024-01-22
  • 동물 보호 종료 테이블
IDOUT_DATE
A012024-01-04
A032024-01-06
A052024-01-11
A062024-01-13
A082024-01-18
A102024-01-23

LEFT JOIN을 수행한 후, 보호 종료 기록이 없는 동물을 찾습니다.

SELECT 
    INS.ID, INS.IN_DATE
FROM 
    ANIMAL_INS INS
LEFT JOIN 
    ANIMAL_OUTS OUTS
ON 
    INS.ID = OUTS.ID
WHERE 
    OUTS.OUT_DATE IS NULL
ORDER BY 
    INS.IN_DATE;

LEFT JOIN 결과

  • 여기서 OUT_DATENULL값인 행만 골라내면 차집합의 결과와 동일한 값을 받아볼 수 있다.

0개의 댓글