데이터베이스 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