집합 연산자
두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중에 또 다른 방법이 있는데 그 방법이 바로 집합 연산자(Set Operator)를 사용하는 방법이다.
집합 연산자 | 연산자의 의미 |
---|---|
UNION | 여러 개의 SQL문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 만든다. |
UNION ALL | 여러 개의 SQL문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시된다. 즉, 단순히 결과만 합쳐놓은 것이다. 일반적으로 여러 개의 결과가 상호 배타적인(Exclusive)일 때 많이 사용한다. 개별 SQL문의 결과가 서로 중복되지 않는 경우, UNION과 결과가 동일한다. (결과의 정렬 순서에는 차이가 있을 수 있음) |
INTERSECT | 여러 개의SQL문의 결과에 대한 교집합이다. 중복된 행은 하나의 행으로 만든다. |
EXCEPT | 앞의 SQL문의 결과에서 뒤의 SQL문의 결과에 대한 차집합이다. 중복된 행은 하나의 행으로 만든다. (일부 데이터베이스는 MINUS를 사용함) |
1. UNION : 합집합
UNION은 두 테이블의 결합을 나타내며, 결합시키는 두 테이블의 중복되지 않은 값들을 반환 한다.
▶부서번호를 조회하는 UNION 예제
SELECT deptno FROM emp
UNION
SELECT deptno FROM dept;
DEPTNO
--------
10
20
30
40
2. UNION ALL : 중복을 포함하는 합집합
UNION과 같으나 두 테이블의 중복되는 값 까지 반환 한다.
▶부서번호를 조회하는 UNION ALL 예제
SELECT deptno FROM emp
UNION ALL
SELECT deptno FROM dept;
DEPTNO
-------
20
30
30
20
30
...
18개의 행이 선택되었습니다.
3. INTERSECT : 교집합
INTERSECT는 두 행의 집합중 공통된 행을 반환 한다.
▶ 부서번호를 조회하는 INTERSECT 예제
SELECT deptno FROM emp
INTERSECT
SELECT deptno FROM dept;
DEPTNO
---------
10
20
30
4. MINUS : 차집합
MINUS는 첫 번째 SELECT문에 의해 반환되는 행 중에서 두 번째 SELECT문에 의해 반환되는 행에 존재하지 않는 행들을 반환 한다.
▶ 사원이 없는 부서를 조회하는 MINUS 예제
SELECT deptno FROM dept
MINUS
SELECT deptno FROM emp;
DEPTNO
---------
40
'Server > DBMS' 카테고리의 다른 글
[DBMS] HAVING 조건 (0) | 2014.12.02 |
---|---|
[DBMS] Group By (0) | 2014.12.02 |
[DBMS] NULL도 데이터이다 (0) | 2014.12.02 |
[DBMS] 서브쿼리 (0) | 2014.11.30 |
[DBMS] 조인 (0) | 2014.11.30 |