| 연산자 | 설명 | 
|---|---|
| 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;
| Gourmet Lanchonetes | Campinas | Brazil | CUSTOMER | 
|---|---|---|---|
| Grandma Kelly's Homestead | Ann Arbor | USA | SUPPLIER | 
| Great Lakes Food Market | Eugene | USA | CUSTOMER | 

SELECT CategoryID AS ID FROM Categories
WHERE CategoryID > 4
UNION
SELECT EmployeeID AS ID FROM Employees
WHERE EmployeeID % 2 = 0;
-- UNION ALL로 바꾸면 중복을 허용하며 모든 것들이 다 나옴!!
ID
5
6
7
8
2
4

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

SELECT CategoryID AS ID
FROM Categories
WHERE 
  CategoryID > 4
  AND CategoryID **NOT IN** (
    SELECT EmployeeID
    FROM Employees
    WHERE EmployeeID % 2 = 0
  );
ID
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;**
→ 서브쿼리를 마치 테이블처럼 사용함!
→ HAVING을 써서 가져왔음
ID
2
4
5
7