개발 공부 기록하기/02. DB & SQL

MySQL 교집합과 차집합

lannstark 2020. 8. 29. 22:10

MySQL에서는 INTERSECT와 MINUS 연산을 지원하지 않는다.

어떻게 하면 다른 쿼리를 같은 효과를 낼 수 있는지 알아보자..!

INTERSECT

SELECT emp_no FROM dept_emp WHERE dept_no = 'd001'
INTERSECT
SELECT emp_no FROM dept_emp WHERE dept_no = 'd002';

INNER JOIN을 사용할 수 있다.

SELECT de1.emp_no
FROM dept_emp de1
    INNER JOIN dept_emp de2 ON de2.emp_no = de1.emp_no AND de2.dept_no = 'd001'
WHERE de1.dept_no = 'd002';

MINUS

SELECT emp_no FROM dept_emp WHERE dept_no = 'd001'
MINUS
SELECT emp_no FROM dept_emp WHERE dept_no = 'd002';

ANTI Join을 활용할 수 있다.

SELECT de1.emp_no
FROM dept_emp de1
    LEFT JOIN dept_emp de2 ON de2.emp_no = de1.emp_no AND de2.dept_no = 'd002'
WHERE de1.dept_no = 'd001' AND de2.dept_no is NULL;