아래 쿼리 결과가 같은데..
같은 쿼리라고 생각하면 되나요
고견 부탁드립니다.
-- 래프트 조인
SELECT A.*
FROM TB_AAA A
LEFT JOIN CO_CODE C1
ON C1.CODE_CD = 'FUEL_DIV_CD'
AND C1.CODE_DETL_CD = A.FUEL_DIV_CD
WHERE 1=1
AND A.SOLD_OUT_YN = 'N'
AND A.EA_TYPE_CD = '02'
AND A.FUEL_DIV_CD IN ('02','03','04')
;
-- 이퀴조인
SELECT A.*
FROM TB_AAA A , CO_CODE C1
WHERE 1=1
AND C1.CODE_CD = 'FUEL_DIV_CD'
AND C1.CODE_DETL_CD = A.FUEL_DIV_CD
AND A.SOLD_OUT_YN = 'N'
AND A.EA_TYPE_CD = '02'
AND A.FUEL_DIV_CD IN ('02','03','04')
의미상 다른 쿼리입니다.
아우터 조인은 조인에 성공하지 못하더라도 a 는 다 나옵니다.
이너 조인은 조인에 성공하지 못한 자료는 안나옵니다.
만약 결과가 같다면?
이너조인을 사용하면 될 상황이 맞는데도 불구하고.
쓸데없이 아우터 조인을 사용한 것은 아닌지 확인이 필요합니다.
보통은 코드테이블에 있는 코드만 실제로 사용하기 때문에 아우터 조인은 필요 없습니다.
또한 위 쿼리의 경우에는 SELECT 절에 c1 의 항목이 전혀 사용되지 않으므로.
아우터조인도 필요 없지만, 조인 자체가 아예 필요 없습니다.
아우터 조인이 필요한 경우는
- 코드가 입력되지 않을 수 있다던가.
- 코드테이블에 없는 값이 입력되는 경우가 있다던가.
http://gurubee.net/lecture/1021