본문 바로가기
study_db

집합 연산자

by developer_j 2021. 4. 17.
728x90
반응형

1. 집합 연산자란?

간단하게 말하면 각기 다른 테이블에서 가져온 데이터를 조인을 사용하지 않고 합쳐서 보여주는 방법이다. 2개 이상의 SELECT 결과를 연산자로 묶어, 마치 1개의 SELECT 쿼리를 친 결과처럼 보이게 한다.

따라서, 

  • 서로 다른 테이블에서 유사한 형태의 결과를 반환하는 것을 하나의 결과로 합치고자 할때
  • 동일 테이블에서 서로 다른 질의를 수행하여 결과를 합치고자 할 때

의 상황에 집합 연산자를 사용한다.

집합 연산자에는 UNION, UNION ALL, INTERSECT, MINUS 가 있고 구분하자면

  1. UNION --> 합집합 / 중복ROW 제거
  2. UNION ALL --> 합집합 / 중복ROW 유지
  3. INTERSECT --> 교집합
  4. MINUS --> 차집합

 

1-2. 집합연산자를 사용하려면 다음 제약 조건을 만족해야 한다.

- SELECT 절의 칼럼 수가 동일해야 한다.

즉, 꼭 동일한 칼럼을 사용해야 한다는 것이 아니다. 예를 들면, 아래의 쿼리도 정상적인 결과를 반환한다.

예) SELECT EMPNO, ENAME, JOB FROM EMP
UNION ALL
SELECT DEPTNO, DNAME, LOC FROM DEPT
;

** 출력결과의 컬럼명은 첫번째 SELECT 문의 컬럼명이 된다.
위의 쿼리 결과


- SELECT절의 동일 위치에 존재하는 칼럼의 데이터 타입이 동일한 데이터 타입이여야 한다. 

그렇지 않으면 아래의 예시처럼 HIREDATE(Date 타입) - DEPTNO(Number 타입) 간에 데이터타입이 동일하지 않다는 오류가 나는 것을 볼 수 있다. 

 

- ORDER BY 는 마지막 SELECT 문 아래에 한번만 작성한다.

집합연산자는 SELECT 해온 결과를 합치는 역할이다. 따라서 각각의 SELECT 문에 따로 ORDER BY를 줄 경우 오류가 나게 된다. ORDER BY 는 쿼리 결과에 대한 정렬처리이다.

 

++ 이분이 진짜 깔끔하게 핵심 정리를 잘하셨음.

preamtree.tistory.com/45

 

[ORACLE] 집합연산자 정리 (UNION, INTERSECT...)

 집합연산자는 조회(SELECT) 쿼리의 결과를 대상으로 연산을 수행하는 연산자이다. UNION, UNION ALL, INTERSECT, MINUS등이 있다. 조회의 결과를 대상으로 연산을 수행하므로, 여러 개의 SELECT문을 하나의

preamtree.tistory.com

 

728x90
반응형