반응형
이 점을 이용해서 LEFT OUTER JOIN으로 차집합
을 구현할 수 있다. 오라클이나 MSSQL과 같은 경우는 EXCEPT
혹은 MINUS
등을 사용하면 되겠지만, MySQL은 버전에 따라 지원하는 경우도 있고 아닌 경우도 있다.
test1
테이블의 데이터 중 test2
테이블에 있는 데이터를 제외하고 가져오고 싶다. 위의 테이블에서 JOIN하는 column을 기준으로 1, 2는 test2
테이블에도 있으니 제외하고, 3 | 6
만을 가져오고 싶은 경우이다.
SELECT *
FROM test1 a LEFT JOIN test2 b
ON (a.aa = b.aa)
WHERE b.aa IS NULL;
3 | 6 | null | null
test2.aa
에 있는 1, 2의 데이터를 제외한 데이터를 test1.aa
에서 가져왔다. LEFT OUTER JOIN이기 때문에 WHERE절 이전까지 실행했을 때 아래와 같은 결과가 나온다.
SELECT *
FROM test1 a LEFT JOIN test2 b
ON (a.aa = b.aa);
1 | 4 | 1 | 7
2 | 5 | 2 | 8
3 | 6 | null | null
여기에서 test2
테이블에 존재하지 않아서 test2
테이블의 column이 null
인 부분만을 가지고 오게 WHERE절을 달아주면!! 차집합이 된다는 것이다.
출처 : https://blog.leocat.kr/notes/2017/07/28/sql-join-on-vs-where
반응형
'데이터베이스 이야기 > MySQL' 카테고리의 다른 글
[MySQL] 리눅스 CentOS7.x + mysql 5.7 이하버전 설치 후 계정 셋팅, 외부 접속 허용 (0) | 2020.09.15 |
---|---|
[MySQL] 커버링 인덱스 (0) | 2020.04.10 |
[MySQL] 인덱스 생성 조건 (0) | 2020.04.10 |
[MySQL] 실행계획 (0) | 2020.04.10 |
[MySQL] MySQL 쓰면서 하지 말아야 할 것 17가지 (0) | 2020.04.10 |
댓글