본문 바로가기

SQLD 공부

SQLD 공부 3. SQL 활용 - 집합 연산자(Set Operator)

집합 연산자(Set Operators)는 SQL에서 두 개 이상의 `SELECT` 쿼리의 결과를 결합하여 하나의 결과 집합으로 만드는 데 사용되는 연산자들입니다. 집합 연산자는 주로 데이터베이스 쿼리의 결과를 통합하거나 비교할 때 유용하게 사용됩니다. 주요 집합 연산자로는 `UNION`, `UNION ALL`, `INTERSECT`, `MINUS`(또는 `EXCEPT`)가 있습니다. 각 연산자의 기능과 사용법을 살펴보겠습니다.

### 1. UNION

`UNION` 연산자는 두 개의 `SELECT` 쿼리 결과를 결합하여 중복된 행을 제거한 후 하나의 결과 집합으로 반환합니다. 즉, 모든 중복된 행이 제거됩니다.

#### 예시:

```sql
SELECT emp_id, emp_name FROM employees
UNION
SELECT emp_id, emp_name FROM managers;
```

이 쿼리는 `employees` 테이블과 `managers` 테이블에서 `emp_id`와 `emp_name`을 결합하여 중복되지 않은 모든 행을 반환합니다.

### 2. UNION ALL

`UNION ALL` 연산자는 두 개의 `SELECT` 쿼리 결과를 결합하여 중복된 행을 포함한 모든 행을 하나의 결과 집합으로 반환합니다. 중복된 행이 제거되지 않습니다.

#### 예시:

```sql
SELECT emp_id, emp_name FROM employees
UNION ALL
SELECT emp_id, emp_name FROM managers;
```

이 쿼리는 `employees` 테이블과 `managers` 테이블에서 `emp_id`와 `emp_name`을 결합하여 중복된 행을 포함한 모든 행을 반환합니다.

### 3. INTERSECT

`INTERSECT` 연산자는 두 개의 `SELECT` 쿼리 결과에서 공통으로 존재하는 행만을 반환합니다. 즉, 두 결과 집합의 교집합을 반환합니다.

#### 예시:

```sql
SELECT emp_id, emp_name FROM employees
INTERSECT
SELECT emp_id, emp_name FROM managers;
```

이 쿼리는 `employees` 테이블과 `managers` 테이블에서 공통적으로 존재하는 `emp_id`와 `emp_name`을 반환합니다.

### 4. MINUS (또는 EXCEPT)

`MINUS` 연산자는 첫 번째 `SELECT` 쿼리 결과에서 두 번째 `SELECT` 쿼리 결과에 존재하지 않는 행만을 반환합니다. 즉, 첫 번째 결과 집합에서 두 번째 결과 집합을 뺀 차집합을 반환합니다. 일부 DBMS에서는 `EXCEPT`라는 키워드를 사용합니다.

#### 예시 (MINUS):

```sql
SELECT emp_id, emp_name FROM employees
MINUS
SELECT emp_id, emp_name FROM managers;
```

이 쿼리는 `employees` 테이블에서 `managers` 테이블에 존재하지 않는 `emp_id`와 `emp_name`을 반환합니다.

#### 예시 (EXCEPT):

```sql
SELECT emp_id, emp_name FROM employees
EXCEPT
SELECT emp_id, emp_name FROM managers;
```

이 쿼리 역시 `employees` 테이블에서 `managers` 테이블에 존재하지 않는 `emp_id`와 `emp_name`을 반환합니다.

### 집합 연산자 사용 시 고려 사항

1. **컬럼 수와 데이터 타입**: 두 `SELECT` 문은 동일한 수의 컬럼을 반환해야 하며, 각 컬럼의 데이터 타입이 서로 호환되어야 합니다.
2. **정렬**: `ORDER BY` 절은 전체 결과 집합의 마지막에만 사용할 수 있습니다.
3. **중복 처리**: `UNION`과 `UNION ALL`의 중복 처리 방법의 차이를 이해하고 사용해야 합니다. `UNION`은 중복을 제거하고, `UNION ALL`은 중복을 포함합니다.

### 결론

집합 연산자는 SQL에서 여러 `SELECT` 쿼리의 결과를 결합하거나 비교할 때 매우 유용한 도구입니다. `UNION`, `UNION ALL`, `INTERSECT`, `MINUS`(또는 `EXCEPT`)를 적절히 사용하면 다양한 데이터 통합 및 분석 시나리오를 효과적으로 처리할 수 있습니다. 각 연산자의 특성과 사용법을 잘 이해하고 활용하면, 복잡한 데이터 집합을 효율적으로 관리하고 필요한 정보를 쉽게 얻을 수 있습니다.

'SQLD 공부' 카테고리의 다른 글

셀프조인  (0) 2024.05.19
계층형 질의  (0) 2024.05.19
SQLD 공부 3. SQL의 활용 - 집계 쿼리 `GROUPING SETS`, `ROLLUP`, `CUBE`  (0) 2024.05.18
SQLD 공부 3. SQL 활용 - 서브쿼리  (0) 2024.05.18
SQLD 공부 2. SQL 기본  (0) 2024.05.18