참고:
- https://stackoverflow.com/questions/6630887/using-is-null-or-is-not-null-on-join-conditions-theory-question
- https://community.teradata.com/t5/General/Is-Null-conditions-in-ON-Join-Vs-Is-Null-in-Where/td-p/50758
1. JOIN ON 절에 IS NULL 체크 관련 쿼리문 예시
select *
from TB_PARENT P with(nolock)
left outer join TB_CHILD C with(nolock)
on P.pid = C.pid
and C.pid is null
결과: JOIN ON 조건문은 테이블들이 서로 JOIN되는 과정에서 적용된다. TB_CHILD 테이블의 pid 컬럼값이 NULL인 것은 없을 것이며 left outer join이 되고 나서야 NULL값이 생성되기 때문에, 위의 JOIN ON 조건은 항상 false가 되어 LEFT OUTER JOIN문은 왼쪽 테이블(TB_PARENT)의 모든 ROW를 반환할 때, 오른쪽 테이블(TB_CHILD) 관련 컬럼값을 NULL로 채워 반환한다. 따라서, 자식이 없는 부모 데이터를 찾을 수 없다.
2. WHERE 절에 IS NULL 체크 관련 쿼리문 예시
select *
from TB_PARENT P with(nolock)
left outer join TB_CHILD C with(nolock)
on P.pid = C.pid
where C.pid is null
결과: WHERE 조건문은 테이블들이 서로 JOIN된 후에 적용된다. 왼쪽 테이블(TB_PARENT)과 오른쪽 테이블(TB_CHILD)이 LEFT OUTER JOIN되고 나서 where 조건문이 적용되기 때문에 자식이 없는 부모 데이터를 찾을 수 있다.
'IT > DB' 카테고리의 다른 글
Shared/Exclusive Lock 개념 (0) | 2019.10.24 |
---|---|
Isolation(격리) Level에 대한 정리 (0) | 2019.10.24 |
MSSQL 특정 월의 N번째 특정 요일에 해당하는 날짜 찾기 (0) | 2018.05.15 |
ACID (트랜잭션의 특성 관련..) (0) | 2018.02.14 |
Index Scan vs Index Seek (0) | 2018.01.27 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!