집합 연산자는 SQL에서 두 개 이상의 쿼리 결과 집합을 결합하거나 조작하는 데 사용됩니다.
집합 연산자는 기본적으로 수학에서의 집합 연산과 유사한 방식으로 작동하며, 각 쿼리의 결과에서 중복을 처리하는 방법에 따라 결과가 달라질 수 있습니다.
이번 글에서는 집합 연산자를 알아보겠습니다!
예시 테이블
예시 테이블 1(직원 테이블: Employees)
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Department VARCHAR(100),
Position VARCHAR(100),
DateOfBirth DATE,
HireDate DATE,
Salary DECIMAL(10, 2),
Email VARCHAR(100),
PhoneNumber VARCHAR(15)
);
INSERT INTO Employees (EmployeeID, FirstName, LastName, Department, Position, DateOfBirth, HireDate, Salary, Email, PhoneNumber)
VALUES
(1, 'John', 'Doe', 'Engineering', 'Software Engineer', '1985-05-15', '2010-06-20', 85000.00, 'john.doe@example.com', '123-456-7890'),
(2, 'Jane', 'Smith', 'Marketing', 'Marketing Manager', '1990-07-22', '2012-04-15', 95000.00, 'jane.smith@example.com', '234-567-8901'),
(3, 'Michael', 'Johnson', 'Sales', 'Sales Representative', '1988-09-10', '2014-01-10', 70000.00, 'michael.johnson@example.com', '345-678-9012');
EmployeeID | FirstName | LastName | DepartmentPosition | Salary | HireDate | PhoneNumber | OfficeLocation | ||
1 | John | Doe | HR | Manager | 80000 | 2015-04-22 | john.doe@example.com | 123-456-7890 | New York |
2 | Jane | Smith | IT | Developer | 95000 | 2017-07-11 | jane.smith@example.com | 234-567-8901 | San Francisco |
3 | Alice | Johnson | Finance | Analyst | 75000 | 2018-09-15 | alice.johnson@example.com | 345-678-9012 | Chicago |
예시 테이블 2(제품 테이블: Products)
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(100),
Category VARCHAR(50),
Supplier VARCHAR(100),
Price DECIMAL(10, 2),
StockQuantity INT,
DateAdded DATE,
IsAvailable BOOLEAN,
WarrantyPeriod INT,
Rating FLOAT
);
INSERT INTO Products (ProductID, ProductName, Category, Supplier, Price, StockQuantity, DateAdded, IsAvailable, WarrantyPeriod, Rating)
VALUES
(101, 'Laptop', 'Electronics', 'TechSupply Co.', 1200.99, 50, '2023-01-15', TRUE, 24, 4.5),
(102, 'Office Chair', 'Furniture', 'HomeGoods Inc.', 150.75, 200, '2022-11-10', TRUE, 12, 4.3),
(103, 'Coffee Maker', 'Appliances', 'Kitchenware Ltd.', 75.20, 30, '2023-03-05', TRUE, 6, 4.0);
ProductID | ProductName | Category | Supplier | Price | StockQuantity | DateAdded | IsAvailable | WarrantyPeriod | Rating |
101 | Laptop | Electronics | TechSupply Co. | 1200.99 | 50 | 2023-01-15 | TRUE | 24 | 4.5 |
102 | Office Chair | Furniture | HomeGoods Inc. | 150.75 | 200 | 2022-11-10 | TRUE | 12 | 4.3 |
103 | Coffee Maker | Appliances | Kitchenware Ltd. | 75.20 | 30 | 2023-03-05 | TRUE | 6 | 4.0 |
집합 연산자
1. 합집합 (UNION, UNION ALL)
UNION: 두 쿼리 결과에서 중복된 행을 제거하고 결합된 결과를 반환합니다.
SELECT FirstName, LastName, Email
FROM Employees
UNION
SELECT Supplier AS FirstName, ProductName AS LastName, 'N/A' AS Email
FROM Products;
실행 결과
FirstName | LastName | |
John | Doe | john.doe@example.com |
Jane | Smith | jane.smith@example.com |
Michael | Johnson | michael.johnson@example.com |
TechSupply Co. | Laptop | N/A |
HomeGoods Inc. | Office Chair | N/A |
Kitchenware Ltd. | Coffee Maker | N/A |
- UNION은 결과 집합에서 중복된 행을 제거합니다.
UNION ALL: 두 쿼리 결과에서 중복을 포함한 모든 행을 결합하여 반환합니다.
SELECT FirstName, LastName, Email
FROM Employees
UNION ALL
SELECT Supplier AS FirstName, ProductName AS LastName, 'N/A' AS Email
FROM Products;
결과
FirstName | LastName | |
John | Doe | john.doe@example.com |
Jane | Smith | jane.smith@example.com |
Michael | Johnson | michael.johnson@example.com |
TechSupply Co. | Laptop | N/A |
HomeGoods Inc. | Office Chair | N/A |
Kitchenware Ltd. | Coffee Maker | N/A |
- UNION ALL은 중복을 포함한 모든 행을 결합하여 반환합니다.
2. 교집합 (INTERSECT)
INTERSECT: 두 쿼리 결과의 공통된 행만 반환합니다.
SELECT FirstName, LastName
FROM Employees
INTERSECT
SELECT Supplier, ProductName
FROM Products;
결과
FirstName | LastName |
- | - |
- 이 예시에서는 공통된 데이터가 없기 때문에 결과가 없습니다. 그러나 동일한 이름이 있을 경우 해당 데이터가 표시됩니다.
3. 차집합 (EXCEPT)
EXCEPT: 첫 번째 쿼리 결과에서 두 번째 쿼리 결과를 제외한 나머지를 반환합니다.
SELECT FirstName, LastName
FROM Employees
EXCEPT
SELECT Supplier, ProductName
FROM Products
결과
FirstName | LastName |
John | Doe |
Jane | Smith |
Michael | Johnson |
- 이 예시는 Employees 테이블의 이름과 성에서 Products 테이블의 공급자 이름과 제품 이름을 제외한 결과를 반환합니다.
'데이터베이스_Database > SQL' 카테고리의 다른 글
[SQL] 쉬워지는 JOIN 2편 - SELF JOIN (0) | 2024.08.06 |
---|---|
[SQL] 쉬워지는 JOIN 1편 - INNER, OUTER, CROSS (0) | 2024.08.06 |
[SQL] 순위와 관련된 함수(윈도우 함수 알아보기 - 1) (0) | 2024.08.02 |
[SQL] 함수 종속성 규칙 (0) | 2024.08.02 |
[SQL] 그룹함수(ROLLUP, CUBE, GROUPING SET) 예시를 통해 완전 습득하기! (0) | 2024.08.02 |