[SQL] INNER JOIN이 LEFT JOIN + WHERE 필터링보다 낫다

Gi Woon Lee·2025년 3월 19일

SQL

목록 보기
29/33

SQL을 아침마다 풀면서 머리를 깨우는 것이 일상이 된 요즘, 오늘도 관성적으로 SQL을 풀었다.
관성의 무서움은 실로 존재한다.

가장 흔하게 쓰이는 JOIN의 형태는 LEFT JOIN이다.
오늘 무지성으로 LEFT JOIN을 사용하는 나 자신에게 꽤나 놀랐다.


LEFT JOIN을 하게 되면 TABLE1의 데이터는 모두 살리고 TABLE2에 같은 값이 없다면 전무 NULL값이 된다.

INNER JOIN을 하게 되면 양 쪽 테이블의 교집합 값들만 가져온다.

INNER JOIN 한번 하면 될 작업을 무지성 LEFT JOINWHERE A IS NOT NULL 필터링을 하는 나에게 실망쓰~

정신 차리고 최적화된 쿼리를 작성하도록 하자.

WITH IN_NATURAL AS (
SELECT *
FROM ANIMAL_INS 
WHERE SEX_UPON_INTAKE IN ('Intact Female', 'Intact Male') 
),
OUT_EXECUTED AS(
SELECT *
FROM ANIMAL_OUTS
WHERE SEX_UPON_OUTCOME IN ('Neutered Male', 'Spayed Female'))

SELECT
    O.ANIMAL_ID, O.ANIMAL_TYPE, O.NAME
FROM
    OUT_EXECUTED O LEFT JOIN IN_NATURAL I
    ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.ANIMAL_ID IS NOT NULL
ORDER BY O.ANIMAL_ID
  • 위 코드를 최적화한 결과
  • with 말고 inner join 사용
SELECT 
    I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME
FROM 
    ANIMAL_INS I INNER JOIN ANIMAL_OUTS O
    ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE 
    I.SEX_UPON_INTAKE LIKE 'Intact%' AND 
    O.SEX_UPON_OUTCOME IN ('Spayed Female', 'Neutered Male')
ORDER BY 
    I.ANIMAL_ID 
  • 훨씬 낫다

0개의 댓글