데이터베이스 이야기/MySQL

[MySQL] 차집합

한희성 2020. 4. 10.
반응형

이 점을 이용해서 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

반응형

댓글

💲 추천 글