Database

집합 연산자(union, union all, intersect, except)

천방지축 개발노트 2020. 9. 15. 19:34

집합 연산자(Set Operator)

여러 개의 질의의 결과를 연결(결합)하여 하나로 결과로 만드는 방식을 의미한다. (즉, 여러 개의 SELECT문을 연결하는 것)

 

집합 연산자

 

1) 일반 집합 연산자

① union : 여러 SQL문의 결과에 대한 합집합, union키워드로 구현.

결과에서 중복된 행은 하나의 행으로 만듬. → 중복을 없애기 위한 정렬 작업으로 시스템 부하↑ ↔ union all키워드는 중복을 제외하지 않고 그대로 결합. 즉, 단순히 쿼리결과를 합침.

② intersection : 여러 SQL문의 결과에 대한 교집합, intersect키워드로 구현.

③ difference : 여러 SQL문의 결과에 대한 차집합. 대다수의 벤더는 EXCEPT를, Oracle은 MINUS키워드를 사용. (SQL표준은 EXCEPT)

④ product(cross product 또는 cartesian product) :

- 여러 SQL문의 결과에 대한 곱집합, cross join키워드로 구현.

- JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 의미.

 

 

2) 순수 관계 연산자

① select연산 : 행, where절로 구현. / select절과 select연산은 의미가 다름을 유의.

② project연산 : 열, select절로 구현.

③ join : 다양한 join기능으로 구현.

 

 

3) 제약조건

① select절의 칼럼 수가 동일해야 함.

② select절의 동일 위치에 존재하는 칼럼의 데이터타입이 상호 호환 가능해야 함(반드시 동일한 데이터 타입일 필요는 없다는 것)

두집합의 칼럼명은 달라도 상관없다.

집합 연산자의 결과를 표시할 때 HEADING(컬럼명) 부분은 첫 번째 SQL문에서 사용된 HEADING이 적용됨.

논리적으로 UNION ALL을 제외한 모든 집합 연산은 SQL결과 집합에서 중복된 건을 배제하는 작업을 먼저 수행하고, 그 이후 집합 연산을 수행(논리적인 관점에서의 처리)