공부/인프런 - Rookiss

Part 5-2-15. SQL 입문 : UNION, INTERSECT, EXCEPT

셩잇님 2024. 2. 13. 18:40
반응형

 

 

💅 SQL 입문

 

 지난 시간에는 정말 너무나도 중요하고 중요한 INDEX의 개념과 INDEX의 종류 등에 대해서 알아보았다. 이번 시간에는 UNION, INTERSECT, EXCEPT 개념을 통해 복수의 테이블을 다루는 개념에 대해서 알아보는 시간을 가진다.

 


 

➕ UNION

 

커리어 평균 연봉이 3백만달러 이상인 선수들의 ID와 평균을 출력해보자. 각 선수들의 평균 연봉이어야 하므로, AVG, Group By와 Having 등을 이용하여 출력할 수 있다.

 

SELECT playerID, AVG(salary)
FROM salaries
Group BY playerID
HAVING AVG(salary) >= 3000000;

 

이번엔 간단하게 12월에 태어난 선수들의 ID를 출력해보자.

SELECT playerID, birthMonth
FROM players
WHERE birthMonth = 12;

 

 그렇다면 평균 연봉이 3백만달러 이상이거나 12월에 태어난 사람들을 출력하고 싶다면 어떻게 해야할까? 일반적인 하나의 SELECT 문으로 해결하기에는 다양한 조건 때문에 골치아플 것이다. 따라서 이럴 때 필요한 것이 바로 UNION이다.

--평균 연봉이 3백만 이상이 '거나' 12월에 태어난 선수의 ID를 출력한다. 

SELECT playerID
FROM salaries
Group BY playerID
HAVING AVG(salary) >= 3000000

UNION

SELECT playerID
FROM players
WHERE birthMonth = 12
ORDER BY playerID

 

 위와같이 UNION을 이용하면 앞서 구했던 두 조건의 쿼리를 합칠 수 있게 된다. 이러면 하나의 SELECT문으로 해결하는 것이 아닌 여러개의 SELECT로 질의를 할 수 있다. 또한 UNION 자체에는 DISTINCT가 포함되어 있다. 만약 중복된 데이터를 구해서 사용하기 위한다면 'UNION ALL'을 이용하면 된다.

 


 

➕ INTERSECT

 

 만약 평균 연봉이 3백만달러이고 12월에 태어난 선수만 출력하고 싶다면? INTERSECT를 이용하면 된다. 즉 교집합의 개념으로 이해할 수 있다.

 

SELECT playerID
FROM salaries
Group BY playerID
HAVING AVG(salary) >= 3000000

INTERSECT

SELECT playerID
FROM players
WHERE birthMonth = 12
ORDER BY playerID

 


 

➕ EXCEPT

 

 만약 평균 연봉이 3백만달러인 직원 집합에서 12월에 태어난 선수를 빼고 싶다면? EXCEPT을 이용하면 된다. 이는 차집합의 개념으로 이해할 수 있다.

SELECT playerID
FROM salaries
Group BY playerID
HAVING AVG(salary) >= 3000000

EXCEPT

SELECT playerID
FROM players
WHERE birthMonth = 12
ORDER BY playerID

 

 

 

반응형