본문 바로가기
Computer Science/Database

[SQL] UNION, INTERSECT, EXCEPT

by JuHy_ 2020. 6. 15.

UNION, INTERSECT, EXCEPT

SQL을 실행하면서 여러 개의 결과를 합쳐 보여주기 위해 set operation을 실행하게 된다.

대표적인 set operation으로 UNION, INTERSECT, EXCEPT가 사용된다.

 

UNION은 | (or) 연산, INTERSECT는 & (and) 연산, EXCEPT는 - (minus) 연산을 나타낸다.

 

UNION

UNION 연산을 사용하면 SQL을 실행한 결과의 합집합을 구할 수 있다.

(SELECT course_id FROM section WHERE sem='Fall' AND year=2019)
UNION
(SELECT course_id FROM section WHERE sem='Spring' AND year=2020)

예를 들어 위 SQL은 2019 가을 학기와 2020 봄 학기에 열린 모든 과목의 course_id를 가져오는 SQL이다.

 

INTERSECT

INTERSECT 연산을 사용하면 SQL을 실행한 결과의 교집합을 구할 수 있다.

(SELECT course_id FROM section WHERE sem='Fall' AND year=2019)
INTERSECT
(SELECT course_id FROM section WHERE sem='Spring' AND year=2020)

마찬가지로 위 SQL은 2019 가을 학기와 2020 봄 학기에 모두 열린 과목의 course_id를 가져오는 SQL이다.

 

EXCEPT

EXCEPT 연산을 사용하면 SQL을 실행한 결과의 차집합을 구할 수 있다.

(SELECT course_id FROM section WHERE sem='Fall' AND year=2019)
EXCEPT
(SELECT course_id FROM section WHERE sem='Spring' AND year=2020)

위 SQL은 2019 가을 학기에 열린 과목 중 2020 봄 학기에 열리지 않은 과목의 course_id를 가져오는 SQL이다.

 

ALL

ALL 키워드를 set operation 뒤에 붙여주면 중복된 결과 값을 삭제하지 않고 나타내준다.

(SELECT course_id FROM section WHERE sem='Fall' AND year=2019)
UNION ALL
(SELECT course_id FROM section WHERE sem='Spring' AND year=2020)

예를 들어 위 SQL은 UNION한 결과와 같지만 두 학기에 모두 열린 과목은 두 번씩 나타나게 된다.

 

 

※ INTERSECT와 EXCEPT 연산을 MySQL에서 지원되지 않는 문법으로, INNER JOIN 을 이용해 직접 구현하여야 한다.