[얄코] Section 2-3. SELECT 더 깊이 파보기 (UNION - 집합으로 다루기)

2023. 4. 18. 16:25Database/갖고노는 MySQL 데이터베이스

연산자 설명
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;

합집합

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

-- UNION ALL로 바꿔볼 것

UNION

UNION ALL

 



교집합

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

 

차집합

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

 

대칭차집합

 
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;

Temp는 쓰이지는 않지만, 꼭 이름을 입력해줘야한다!

여러가지 방법으로 나타낼 수 있지만, 

여기서는 union all인 경우면 교집합인 부분이 두개가 나타남으로, 하나만 count되는 것만 출력해내서 결과값을 도출해낸다.

 

 

출처 : https://www.yalco.kr/@sql/2-3/

 

UNION - 집합으로 다루기

어려운 프로그래밍 개념들을 쉽게 설명해주는 유튜브 채널 '얄팍한 코딩사전'. 영상에서 다 알려주지 못한 정보들이나 자주 묻는 질문들의 답변들, 예제 코드들을 얄코에서 확인하세요!

www.yalco.kr