반응형
집합연산자는 여러 쿼리의 결과를 하나로 결합할 때 사용됩니다.
대표적인 집합 연산자는 UNION, UNION ALL, INTERSECT, EXCEPT 네가지가 있습니다.
1. UNION
- 두 개 이상의 SELECT 문의 결과를 합치면서, 중복된 결과는 제거
흔히 배운 합집합과 같습니다.
JOIN 배울 때 잠깐 나왔는데, LEFT JOIN과 RIGHT JOIN 결과를 합쳐서 OUTER JOIN 처럼 이용했습니다.
SELECT name FROM heros
UNION
SELECT name FROM villains;
heros
테이블과 villains
테이블에 있는 모든 사람의 이름 가져옵니다.
2. UNION ALL
- UNION과 비슷하지만 중복된 값도 포함하여 모든 결과를 반환
- 예를 들어,
RURU
이라는 이름이 두 테이블에 모두 있다면, 결과에는RURU
가 두 번 나오게 됨
3. INTERSECT
- 두 SELECT 문의 결과에서 겹치는 데이터만 반환
말 그대로 교집합이 되겠습니다. (그런데 왜 실행할 때 빨간 줄이 나오는 건가요?)
> 히어로이면서 악당인 사람 골라내기
SELECT name FROM heros
INTERSECT
SELECT name FROM villains;
heros
테이블과 villains
테이블에서 겹치는 이름만 가져올 수 있습니다.
그리고 아래와 같은 방법으로 INTERSECT를 대체할 수 있습니다.
SELECT name FROM heros
WHERE name IN (SELECT name FROM villains);
4. EXCEPT
- 첫 번째 SELECT문의 결과에서 두 번째 SELECT 문의 결과를 제외한 값을 반환
차집합처럼 한쪽에 포함되고 다른쪽에 포함되지 않는 값들을 가져옵니다.
> 완전한 히어로 찾기
SELECT name FROM heros
EXCEPT
SELECT name FROM villains;
아래와 같은 방법으로도 구할 수 있습니다.
SELECT name FROM heros
WHERE name NOT IN (SELECT name FROM villains);
5. 마무리
UNION
: 중복을 제거하고 두 쿼리의 결과를 합침UNION ALL
: 중복을 포함하여 두 쿼리의 결과를 합침INTERSECT
: 두 쿼리의 공통 데이터를 반환EXCEPT
: 첫 번째 쿼리의 결과에서 두 번째 쿼리의 결과를 제외한 데이터를 반환
그리고 주의사항 두 가지와 함께 끝 !
- 집합 연산자를 사용할 때는 각 SELECT 문의 컬럼 수와 데이터 타입이 일치해야 함
- UNION과 UNION ALL을 사용할 때, 결과를 정렬하고 싶다면 전체 쿼리 끝에 ORDER BY를 추가해야 함
반응형
'Database > MySQL' 카테고리의 다른 글
[MySQL] CTE 활용하기 - WITH / RECURSIVE WITH (0) | 2024.10.17 |
---|---|
[MySQL] 뷰(VIEW) 개념과 사용 방법 (0) | 2024.10.17 |
[MySQL] 인덱스(Index): 종류, 설정 방법 (0) | 2024.10.15 |
[MySQL] 서브쿼리(Subquery) 이용하기 (0) | 2024.10.14 |
[MySQL] SQL 명령어 - DDL / DML / DCL / TCL (0) | 2024.10.11 |