Learning SQL 6장 요약 - 집합 연산자
SQL
2022. 11. 24. 22:35
6장 집합 연산자
다양한 집합 연산자를 사용해서 결과를 결합하는 방법을 알아본다.
집합 이론
연산 | 의미 |
union | 합집합 |
intersect | 교집합 |
except | 차집합 |
집합 연산을 수행할 때는 공통점이 있어야 한다.
- 두 데이터셋 모두 같은 수의 열을 가져야 한다.
- 두 데이터셋의 각 열의 자료형은 서로 동일해야 한다.(또는 서버가 변환할 수 있어야 한다.)
집합 이론 실습
SELECT 1 num, 'abc' str
UNION
SELECT 9 num, 'xyz' str;
union 연산자
union은 결합된 집합을 정렬하고 중복을 제거
union all은 그렇지 않다.
union all 예시 - 결과셋에 중복값이 있다.
SELECT c.first_name, c.last_name
FROM customer c
WHERE c.first_name LIKE 'J%' AND c.last_name LIKE 'D%'
UNION ALL
SELECT a.first_name, a.last_name
FROM actor a
WHERE a.first_name LIKE 'J%' AND a.last_name LIKE 'D%';
union 예시 - 중복 제거됨
SELECT c.first_name, c.last_name
FROM customer c
WHERE c.first_name LIKE 'J%' AND c.last_name LIKE 'D%'
UNION
SELECT a.first_name, a.last_name
FROM actor a
WHERE a.first_name LIKE 'J%' AND a.last_name LIKE 'D%';
intersect 연산자
SELECT c.first_name, c.last_name
FROM customer c
WHERE c.first_name LIKE 'D%' AND c.last_name LIKE 'T%'
INTERSECT
SELECT a.first_name, a.last_name
FROM actor a
WHERE a.first_name LIKE 'D%' AND a.last_name LIKE 'T%';
(Empty Set)
except 연산자
SELECT a.first_name, a.last_name
FROM actor a
WHERE a.first_name LIKE 'J%' AND a.last_name LIKE 'D%'
EXCEPT
SELECT c.first_name, c.last_name
FROM customer c
WHERE c.first_name LIKE 'J%' AND c.last_name LIKE 'D%';
except all 연산자
집합 A가
{10, 10, 10, 11, 12}
이고
집합 B가
{10, 10}
이라면,
A except B는 다음과 같다.
{11, 12}
A except all B는 다음과 같다.
{10, 11, 12}
except는 A에서 모든 중복 데이터를 제거하는 반면,
except all은 A에 대한 중복 데이터가 발생할 때만 제거한다.
집합 연산 규칙
복합 쿼리의 결과 정렬
맨 마지막에 order by 절을 추가하면 된다.
SELECT a.first_name fname, a.last_name lname
FROM actor a
WHERE a.first_name LIKE 'J%' AND a.last_name LIKE 'D%'
UNION ALL
SELECT c.first_name, c.last_name
FROM customer c
WHERE c.first_name LIKE 'J%' AND c.last_name LIKE 'D%'
ORDER BY lname, fname;
집합 연산의 순서
union all → union 실행
SELECT a.first_name, a.last_name
FROM actor a
WHERE a.first_name LIKE 'J%' AND a.last_name LIKE 'D%'
UNION ALL
SELECT a.first_name, a.last_name
FROM actor a
WHERE a.first_name LIKE 'M%' AND a.last_name LIKE 'T%'
UNION
SELECT c.first_name, c.last_name
FROM customer c
WHERE c.first_name LIKE 'J%' AND c.last_name LIKE 'D%';
6개 행이 반환된다.
union → union all 실행
SELECT a.first_name, a.last_name
FROM actor a
WHERE a.first_name LIKE 'J%' AND a.last_name LIKE 'D%'
UNION
SELECT a.first_name, a.last_name
FROM actor a
WHERE a.first_name LIKE 'M%' AND a.last_name LIKE 'T%'
UNION ALL
SELECT c.first_name, c.last_name
FROM customer c
WHERE c.first_name LIKE 'J%' AND c.last_name LIKE 'D%';
7개 행이 반환된다.
'SQL' 카테고리의 다른 글
Learning SQL 8장 요약 - 그룹화와 집계 (0) | 2022.12.01 |
---|---|
Learning SQL 7장 요약 - 데이터 생성, 조작과 변환 (0) | 2022.11.27 |
Learning SQL 5장 요약 - 다중 테이블 쿼리 (0) | 2022.11.24 |
Learning SQL 4장 요약 - 필터링 (0) | 2022.11.24 |
Learning SQL 3장 요약 - 쿼리 입문 (0) | 2022.11.24 |