데이터베이스 with MSSQL/SQL 입문

UNION, INTERSECT, EXCEPT

코다람쥐 2022. 4. 8. 12:51

1. 필요성

-- 12월에 태어난 선수들의 playerID
SELECT playerID, birthMonth
FROM players
WHERE birthMonth = 12
-- 커리어 평균 연봉이 3백만 이상인 선수들의 playerID
SELECT playerID, AVG(salary)
FROM salaries
GROUP BY playerID
HAVING AVG(salary) >= 3000000

두 개의 SELECT문을 활용하여 합집합, 교집합, 차집합을 구하고 싶을 때는 각각 UNION, INTERSECT, EXCEPT를 활용할 수 있다.

 

2. UNION, UNION ALL

-- [커리어 평균 연봉이 3백만 이상인 선수] || [12월에 태어난 선수]들의 playerID (합집합)
-- UNION (중복 제거), UNION ALL(중복 허용)
SELECT playerID
FROM salaries
GROUP BY playerID
HAVING AVG(salary) >= 3000000
UNION
SELECT playerID
FROM players
WHERE birthMonth = 12

 

3. INTERSECT

-- [커리어 평균 연봉이 3백만 이상인 선수] && [12월에 태어난 선수]들의 playerID (교집합)
-- INTERSECT
SELECT playerID
FROM salaries
GROUP BY playerID
HAVING AVG(salary) >= 3000000
INTERSECT
SELECT playerID
FROM players
WHERE birthMonth = 12

 

4. EXCEPT

-- [커리어 평균 연봉이 3백만 이상인 선수] - [12월에 태어난 선수]들의 playerID (차집합)
-- EXCEPT
SELECT playerID
FROM salaries
GROUP BY playerID
HAVING AVG(salary) >= 3000000
EXCEPT
SELECT playerID
FROM players
WHERE birthMonth = 12