database

집합 연산자

developer_j 2021. 4. 17. 14:51
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
반응형