추석맞이/ MySQL 공부 Chapter 2 - ⓶ + 후기

flobeeee·2021년 9월 24일
0

강의

목록 보기
9/14
post-thumbnail

Chapter 2. SELECT 심화

🧐 3. UNION - 집합으로 다루기

UNION 중복을 제거한 집합
UNION ALL 중복을 제거하지 않은 집합

SELECT CustomerName AS Name, City, Country, 'CUSTOMER'
FROM Customers
UNION
SELECT SupplierName AS Name, City, Country, 'SUPPLIER'
FROM Suppliers
ORDER BY Name;

JOIN과는 다르게, 행으로 합쳐진다.
Customers테이블에서 CustomerName을 Name 컬럼명으로 정의
Suppliers테이블에서 SupplierName을 Name 컬럼명으로 정의
City, Country는 같다.
그리고 컬럼을 하나 더 만들어서 해당 데이터가 CUSTOMER인지 SUPPLIER에서 온건지 표기한다.
아래 결과를 보면 이해하기 쉽다.

실전에서는 많이 쓰지 않는다고 하는데, 그래도 이런 게 있다는 걸 알아두면 좋을 것 같다.

합집합

SELECT CategoryID AS ID FROM Categories
WHERE CategoryID > 4
UNION
SELECT EmployeeID AS ID FROM Employees
WHERE EmployeeID % 2 = 0;

Categories테이블에서는 ID가 1부터 8까지 있다.
Employees테이블에서는 ID가 1부터 9까지 있다.

5, 6, 7, 8, 2, 4 가 출력된다.

  • UNION ALL

5, 6, 7, 8, 2, 4, 6, 8 이 출력된다.

교집합

SELECT CategoryID AS ID
FROM Categories C, Employees E
WHERE
C.CategoryID > 4
AND E.EmployeeID % 2 = 0
AND C.CategoryID = E.EmployeeID;

6, 8이 출력된다.

차집합

SELECT CategoryID AS ID
FROM Categories
WHERE
CategoryID > 4
AND CategoryID NOT IN (
SELECT EmployeeID
FROM Employees
WHERE EmployeeID % 2 = 0
);

5, 7이 출력된다.

대칭차집합

SELECT ID FROM (
SELECT CategoryID AS ID FROM Categories
WHERE CategoryID > 4
UNION ALL
SELECT EmployeeID AS ID FROM Employees
WHERE EmployeeID % 2 = 0
) AS Temp
GROUP BY ID HAVING COUNT(*) = 1;

UNION ALL로 중복되게 모두 모은 후에
COUNT로 1인 것만 가져와서, 겹치는 데이터는 제외한다.


🧐 후기

처음에는 3시간짜리 영상이라서 추석연휴동안 충분히 끝낼 줄 알았다.
블로그에 내용 정리하고, 직접 쿼리를 날려서 결과를 확인하는 작업을 하니 시간이 턱없이 부족했다.
추석내내 강의 붙잡고 있으면 다 소화했겠지만 다른 일정도 있어서 시간날 때마다 했다.

강의를 들으며 내가 정말 짧은 쿼리경험을 가지고 있다는 것을 알았다.
대부분이 내가 사용한 적 없는 쿼리여서 많이 배울 수 있는 시간이었다.
챕터2 이후로도 내용이 있긴한데, 우선 조회하는 쿼리부터 제대로 소화할 필요성을 느꼈다.
꾸준히 정리한 내용을 복습하면서 적어도 조회하는 쿼리는 구글링 필요없이 해내고 싶다.

연휴마다 이렇게 내가 평소 더 공부하고 싶었던 내용을 배우는 습관이 생겼으면 좋겠다.

profile
기록하는 백엔드 개발자

1개의 댓글

comment-user-thumbnail
2022년 2월 6일

복습완료

답글 달기