본문 바로가기

Database

[Oracle] 집합 UNION, MINUS, INTERSECT

 

집합


-UNION : 결과값을 합집합으로 묶음 (데이터 중복은 제거된다.)
-UNIONALL : 결과값을 합집합으로 묶음 (데이터 중복은 허용한다.)
-MINUS : 결과값을 차집합으로 묶음 A-B = A (순수한 A)
-INTERSECT : 결과값을 교집합으로 묶음

부서번호가 10번과 20번인 내용 출력
-SELECT eno, ename , dno FROM emp WHERE dno = 10
UNION
SELECT eno, ename , dno FROM emp WHERE dno = 20;

 


집합 연산자를 이용해서 전체 emp 내용중 10번 부서번호를 제외한 나머지 내용을 출력

-SELECT eno, ename, dno FROM emp
 MINUS
 SELECT eno, ename, dno FROM emp WHERE dno = 10;




예시



20번, 30번 부서에 근무하고 있는 사원 중 급여(sal)가 2000 초과인 사원을 다음 두가지 방식의 SELECT문을 사용하여 사원번호, 급여, 부서번호를 출력

1)집합연산자를 사용하지 않은 방식


-SELECT empno, ename, job, sal, deptno FROM emp WHERE deptno IN(20,30) AND sal > 2000;



2)집합연산자를 사용한 방식


-SELECT EMPNO, ENAME, JOB, SAL, DEPTNO
  FROM EMP
WHERE DEPTNO = 20
   AND SAL > 2000
UNION
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO
  FROM EMP
WHERE DEPTNO = 30
   AND SAL > 2000;