[DBMS] 집합연산자


집합 연산자


두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중에 또 다른 방법이 있는데 그 방법이 바로 집합 연산자(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