💅 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
'공부 > 인프런 - Rookiss' 카테고리의 다른 글
Part 5-2-17. SQL 입문 : TRANSACTION, COMMIT/ROLLBACK (0) | 2024.05.13 |
---|---|
Part 5-2-16. SQL 입문 : JOIN, CROSS/INNER/LEFT/RIGHT JOIN (0) | 2024.05.09 |
Part 5-2-14. SQL 입문 : INDEX (1) | 2024.02.13 |
Part 5-2-13. SQL 입문 : 정규화 (1) | 2024.02.13 |
Part 5-2-12. SQL 입문 : 데이터베이스 작성 (0) | 2024.02.13 |