728x90
Left join 에서 Where 절에 조건이 들어가는 경우와 On 절에 조건이 들어가는 경우의 차이 하고자 합니다.
개념적 이해
대상의 범위를 먼저 지정하냐 나중에 지정하냐의 차이
(on -> where)
Inner join 일 경우는 상관 없는 문제.
outer join 일 경우에는 상관이 있음.
Optimizer 는 이렇 게 해석합니다.
WHERE 절: 조인한 후에 필터링(= null 포함 된 대상에 대해 null이 아닌 대상으로 필터링)
ON 절 : 조인하기 전에 필터링(= 필터링 후 outer join결과 null 출력 가능)
조인의 기준(driving) 테이블의 조건은 on/where 어디든 동일 하지만
조인 대상 테이블의 조건은 on에 작성되어야 원하는 결과를 볼수 있다. ( where 절은 inner join과 동일하게 동작 )
select *
from A left join B on A.c1 = B.c1
where B.c2 = 5
-->해석: A기준으로 B를 조인하고 (B가 NULL인 대상 포함) --> B를 값으로 필터링 ( B 에 NULL이 아닌 값인 것만 출력 )
select *
from A left join B on A.c1 = B.c1 on B.c2 = 5
--> 해석 : B를 값으로 필터링 --> A기준으로 B를 조인(B가 NULL인 대상 포함)
조인 전에 거르냐 후에 거르냐의 문제로 한번만 잘 생각해보면 당연한 문제이지만 자주 헷갈리는 부분입니다.
'프로그래밍 > TSQL' 카테고리의 다른 글
[MSSQL] 문자열 비교하기 ( 동일한 부분만 리턴하기 ) (0) | 2020.04.14 |
---|---|
[MSSQL] MDF, LDF 이동 / DB 상위 버전->하위 버전으로 이동 시 오류 발생 (0) | 2020.02.21 |
MSSQL 범위 지정하여 가져오기 (0) | 2020.02.07 |
MSSQL TO MYSQL 데이터 포팅시 NULL 처리 (0) | 2020.02.07 |
[MSSQL] TSQL 영문 대소문자 구분 비교 (0) | 2020.01.16 |
댓글