1. SQL 집합 연산자
테이블을 구성하는 행집합에 대해 테이블의 부분집합을 결과로 반환하는 연산자
집합 연산자 | 의미 |
UNION | 두 집합에 대해 중복되는 행을 제외한 합집합 |
UNION ALL | 두 집합에 대해 중복되는 행을 포함한 합집합 |
MINUS | 두 집합 간의 차집합 |
INTERSECT | 두 집합 간의 교집합 |
- 집합 연산자 사용법
SELECT 명령문1
[UNION | UNION ALL | INTERSECT | MINUS]
SELECT 명령문2;
2. 합집합 : UNION, UNION ALL
- UNION
두 개의 테이블에 속하면서 중복되는 행을 제외한 행집합을 결과집합으로 반환
(수학의 집합 연산에서 합집합을 의미)
→ UNION ALL은 중복되는 행을 제외하지 않고 모두 출력
- UNION 연산 시, 합병이 불가능한 경우
-- 1학년이면서 몸무게가 70kg 이상인 학생의 집합(stud_heavy)과
-- 1학년이면서 101번 학과에 소속된 학생(stud_101)으로 구성된 두 개의 테이블 생성
CREATE TABLE STUD_HEAVY AS
SELECT *
FROM STUDENT
WHERE GRADE = 1 AND WEIGHT >= 70;
CREATE TABLE STUD_101 AS
SELECT *
FROM STUDENT
WHERE GRADE = 1 AND DEPTNO = 101;
-- stud_heavy와 stud_101 테이블에 대해
-- UNION, UNION ALL 연산을 각각 수행한 결과를 출력하여라.
SELECT STUDNO, NAME, DEPTNO, WEIGHT
FROM STUD_HEAVY
UNION
SELECT STUDNO, NAME, DEPTNO, WEIGHT
FROM STUD_101;
SELECT STUDNO, NAME, DEPTNO, WEIGHT
FROM STUD_HEAVY
UNION ALL
SELECT STUDNO, NAME, DEPTNO, WEIGHT
FROM STUD_101;
3. 교집합 : INTERSECT
- INTERSECT
두 개의 테이블에 모두 속하는 행집합을 결과집합으로 반환
(수학의 집합 연산에서 교집합을 의미)
SELECT STUDNO, NAME, DEPTNO, WEIGHT
FROM STUD_HEAVY
UNION ALL
SELECT STUDNO, NAME, DEPTNO, WEIGHT
FROM STUD_101;
4. 차집합 : MINUS
- MINUS
A테이블에는 속하지만, B 테이블에는 속하지 않는 행집합을 결과집합으로 반환
(수학의 집합 연산에서 차집합을 의미)
SELECT STUDNO, NAME, DEPTNO, WEIGHT
FROM STUD_HEAVY
MINUS
SELECT STUDNO, NAME, DEPTNO, WEIGHT
FROM STUD_101;
SELECT STUDNO, NAME, DEPTNO, WEIGHT
FROM STUD_101
MINUS
SELECT STUDNO, NAME, DEPTNO, WEIGHT
FROM STUD_HEAVY;