Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- COS Pro
- 백준 N과 M 자바
- Stack
- lv2
- Programmers
- StringTokenizer
- lv0
- java
- Queue
- 프로그래머스 자바
- 알고리즘
- 프로그래머스
- 문자열
- 스프링부트 도커로 배포
- 스프링부트 도커 배포
- 프로그래머스 문자열 정렬
- 백준
- 큐
- 이진수 변환
- SWEA
- 자바
- Lv1
- 오름차순 정렬
- 스택
- 클라이언트
- 프로그래머스 풀이
- 삼각형의 완성조건
- 버퍼
- index of
- 스프링부트 도커
Archives
- Today
- Total
mun dev
[SQL] 집합 연산자 정리 (UNION, INTERSECT...) 본문
집합 연산자 정리
1. UNION 합집합
UNION은 합집합의 개념이다. 철수와 영희가 듣는 과목을 각각 조회한 쿼리 UNION으로 처리하면 철수와 영희가 듣는 국어와 영어는 한 번만 나오게 된다.
timetable
id | name | subject |
1 | 철수 | 국어 |
2 | 철수 | 영어 |
3 | 철수 | 수학 |
4 | 영희 | 국어 |
5 | 영희 | 영어 |
select subject
from timetable
where name = '철수'
union
select subject
from timetable
where name = '영희';
결과
subject |
국어 |
영어 |
수학 |
2. UNION ALL
UNION과 유사하지만 차이점은 중복된 항목도 모두 조회한다는 것이다.
timetable
id | name | subject |
1 | 철수 | 국어 |
2 | 철수 | 영어 |
3 | 철수 | 수학 |
4 | 영희 | 국어 |
5 | 영희 | 영어 |
select subject
from timetable
where name = '철수'
union all
select subject
from timetable
where name = '영희';
결과
subject |
국어 |
영어 |
국어 |
영어 |
수학 |
3. INTERSECT
교집합을 의미한다. 사용 예와 결과 예는 아래와 같다.
timetable
id | name | subject |
1 | 철수 | 국어 |
2 | 철수 | 영어 |
3 | 철수 | 수학 |
4 | 영희 | 국어 |
5 | 영희 | 영어 |
select subject
from timetable
where name = '철수'
intersect
select subject
from timetable
where name = '영희';
결과
subject |
국어 |
영어 |
4. MINUS
차집합을 의미한다. 먼저 위치한 SELECT문을 기준으로, 다른 SELECT문과 공통된 레코드를 제외한 항목만 추출된다.
timetable
id | name | subject |
1 | 철수 | 국어 |
2 | 철수 | 영어 |
3 | 철수 | 수학 |
4 | 영희 | 국어 |
5 | 영희 | 영어 |
select subject
from timetable
where name = '철수'
minus
select subject
from timetable
where name = '영희';
결과
subject |
수학 |
주의사항
1. SELECT문
들은 같은 개수의 컬럼을 조회해야만 한다.
- 이를 지키지 않을 경우 에러가 발생한다. 그 이유는 2번에서 설명이 가능하다.
2. SELECT문들이 여러 개의 컬럼을 조회할 경우, 모든 컬럼에 대해 집합연산을 수행UNION연산에 여러 컬럼을 적용할 때는 주의해야 한다.
- 집합연산자로 연결되는 SELECT 문들이 여러 개의 컬럼을 조회할 경우, 그 컬럼들을 묶어 하나의 세트로 인식하여 중복여부를 판단한다.
3. ORDER BY문
은 맨 마지막에 사용할 수 있다.
- ORDER BY문은 쿼리 수행 결과를 특정 컬럼을 기준으로 정렬하는 것이므로 맨 마지막이 아닌 중간에 수행해 버리면 ORDER BY의 수행이 무효화될 것이다.
'DB > Oracle' 카테고리의 다른 글
[Oracle] 숫자 함수 Round, Floor, Ceil 사용법 (0) | 2024.01.30 |
---|---|
[Oracle] OVER()와 PARTITION BY 사용하기 (0) | 2024.01.29 |
[Oracle] INSTR 함수, 특정 문자 위치 확인 (0) | 2024.01.23 |
[Oracle] CONNECT BY 순차적 목록 만들기 (0) | 2024.01.19 |
[Oracle] 원하는 행만 반환, ROWNUM() (0) | 2024.01.19 |