목록
SET
두 가지 select문을 통해 얻어온 결과에 대해 집합 연산을 하는 명령문이다.
두 select문의 각 컬럼의 개수, 순서가 완전히 같아야만 한다.
UNION
중복을 허용하지 않는 합집합.
중복이 있다면 하나의 row(데이터)만 가져온다.
1 | SELECT empno, ename, job, deptno |
- 쿼리 A
3개의 row가 조회된 것을 알 수 있다.
- 쿼리 B
4개의 row가 조회된 것을 알 수 있다.
- 쿼리 A, B를 UNION을 통해 조회
앞서 조회된 두 개의 쿼리 결과에서 중복된 결과인 ename='MILLER'
를 제외한 나머지 7개의 row가 조회된 것을 알 수 있다.
UNION ALL
UNION과 달리 중복되더라도 모든 row의 데이터를 조회하는 합집합
1 | SELECT empno, ename, job, deptno |
- 쿼리 A
- 쿼리 B
- 쿼리 A, B를 UNION ALL로 조회
각각의 쿼리에 따른 결과가 중복을 포함하여 7개의 row로 조회된 것을 알 수 있다. (MILLER가 두 번 조회되었다.)
INTERSECT
두 가지 쿼리의 교집합을 구하는 쿼리이다.
1 | SELECT empno, ename, job, deptno |
- 쿼리 A
- 쿼리 B
- 쿼리 A, B를 INTERSECT로 조회
MINUS
두 가지 쿼리의 차집합을 구하는 쿼리이다. 정확히는 A 조회문에서 B조회문의 결과를 제외한 조회를 의미한다.
INTERSECT에서 사용한 쿼리를 재사용해보겠다.
1 | SELECT empno, ename, job, deptno |
- 쿼리 A
- 쿼리 B
- 쿼리 A,B를 MINUS를 이용한 조회
쿼리 A의 조회 결과에서 쿼리 B와 중복되는 결과, 즉 INTERSECT 결과만 빠진 나머지 쿼리 A의 조회 결과만 조회된 것을 알 수 있다.