집합연산자란?
- 여러 건의 데이터들(집합)을 연산
연산자 종류 | 내용 |
UNION | 두 집합의 합집합. 중복제거O. 정렬O. |
UNION ALL | 두 집합의 합집합. 중복제거X. 정렬X. |
INTERSECT | 두 집합의 교집합. |
MINUS | 두 집합의 차집합. |
- 집합연산자를 사용할 때는
1) 두 집합의 SELECT절에 오는 컬럼의 갯수가 같아야하고
2) 두 집합의 SELECT 절에 오는 컬럼의 데이터형이 같아야하며
3) 두 집합의 컬럼명은 달라도 괜찮음
- UNION, INTERSECT, MINUS는 성능이 좋지 않다
==> 데이터 양이 많거나 집합연산자를 많이 사용할 경우 속도가 느려짐
==> 집합 연산자 보다는 다른 방법의 사용을 권장함.
- MINUS 연산자는 결과값이 큰 집합을 먼저 적어야 한다.
UNION 예시
SELECT studno,name,deptno1,1
FROM student
WHERE deptno1=101
UNION
SELECT profno,name,deptno,2
FROM professor
WHERE deptno=101;
- 첫번째 SELECT문에서 선택한 학생 데이터와 두번째 SELECT문에서 선택한 교수 데이터가 합집합으로 나오는 것을 확인할 수 있다.
- 또한, 앞에서 말한 집합연산자 사용시의 3가지 요건(컬럼 갯수 같고, 데이터형 같고, 컬럼명은 달라도 됨)을 확인할 수 있다.
- 맨 마지막 컬럼 값인 1은 첫번째 SELECT 문에서 가져온 데이터라는 것을, 2는 두번째 SELECT 문에서 가져온 데이터라는 것을 나타낸다.
UNION, UNION ALL 차이
--ex1) UNION: 합집합. 중복제거O. 정렬O.
SELECT studno,name
FROM student
WHERE deptno1=101
UNION
SELECT studno,name
FROM student
WHERE deptno2=201;
--ex2) UNION ALL: 합집합. 중복제거X. 정렬X.
SELECT studno,name
FROM student
WHERE deptno1=101
UNION ALL
SELECT studno,name
FROM student
WHERE deptno2=201;
- UNION을 했을 때는 studno가 오름차순으로 정렬되며, 중복이 제거되어 James Seo가 한 번만 들어간 것을 볼 수 있다.
- 반면, UNION ALL을 했을 때는 studno가 정렬되지 않으며, 중복제거가 되지 않아 James Seo가 두 번 들어간 것을 확인할 수 있다.
INTERSECT 예시
SELECT studno,name
FROM student
WHERE deptno1=101
INTERSECT
SELECT studno,name
FROM student
WHERE deptno2=201;
- 1전공(deptno1)이 101인 집합과 2전공(deptno2)이 201인 집합의 교집합이 출력된다.
MINUS 예시
SELECT empno,ename,sal
FROM emp
MINUS
SELECT empno,ename,sal
FROM emp
WHERE sal>2500;
- emp 전체 집합에서 월급이 2500 초과인 사람을 제외한 차집합을 출력한다.
(즉, 월급이 2500 미만인 사람이 출력됨)
'Programming > Database(Oracle, SQL)' 카테고리의 다른 글
[Oracle/SQL] 시퀀스 (Sequence) (0) | 2020.02.16 |
---|---|
[Oracle/SQL] 형 변환함수 - TO_CHAR, TO_NUMBER, TO_DATE (0) | 2020.02.04 |
[Oracle/SQL] 날짜함수 - SYSDATE, NEXT_DAY, LAST_DAY 등 (0) | 2020.02.02 |
[Oracle/SQL] 숫자함수 - ROUND, TRUNC, CEIL, MOD (0) | 2020.02.02 |
[Oracle/SQL] 문자함수 - SUBSTR, INSTR, TRIM 등 (0) | 2020.01.30 |
[Oracle/SQL] SQL 연산자, 데이터형 (0) | 2020.01.29 |
[Oracle/SQL] SQL의 종류 - DQL, DML, DDL, DCL, TCL (0) | 2020.01.29 |
[Oracle 기초] 가격정책, CRUD, 스키마 (0) | 2020.01.27 |