set operation
여러 개의 select 결과물을 하나의 쿼리로 만드는 연산자
여러개의 질의결과(결과 집합)를 세로로 연결한 방식
집합연산자 조건
1. 두개 이상의 결과집합에 대해 컬럼수가 동일해야함(행의 갯수는 달라도 됨)
2. 같은 위치의 컬럼은 데이터 타입이 상호 호환 가능해야 함(완전히 똑같진 않아도 호환 가능하면 됨)
union
union과 union all은 여러 개의 쿼리 결과를 하나로 합치는 연산자
그 중 union은 중복된 영역을 제외하여 하나로 합치는 연산자
첫번째 컬럼 기준으로 오름차순 정렬
예제)부서가 D5이거나 급여가 300만원 이상인 사원 조회(합집합)
select emp_id,
emp_name,
dept_code,
salary
from employee
where dept_code = 'D5'
union
select emp_id,
emp_name,
dept_code,
salary
from employee
where salary >= 3000000;
union all
여러 쿼리 결과물에 대한 합집합
union 과의 차이점은 중복된 영역을 모두 포함시키는 연산자임
정렬 없이 그대로 붙임
예제)부서가 D5이거나 급여가 300만원 이상인 사원 조회(합집합+교집합)
select emp_id,
emp_name,
dept_code,
salary
from employee
where dept_code = 'D5'
union all
select emp_id,
emp_name,
dept_code,
salary
from employee
where salary >= 3000000;
intersect
여러 개의 select 결과에서 공통된 부분만 결과로 추출
즉, 수행 결과에 대한 교집합임
예제)부서가 D5이거나 급여가 300만원 이상인 사원 조회(교집합)
select emp_id,
emp_name,
dept_code,
salary
from employee
where dept_code = 'D5'
intersect
select emp_id,
emp_name,
dept_code,
salary
from employee
where salary >= 3000000;
minus
선행 select 결과에서 다음 select 결과와 겹치는 부분을 제외한 나머지 부분만 추출
즉, 두 쿼리 결과물의 차집합임
순서가 중요함
예제)부서가 D5이거나 급여가 300만원 이상인 사원 조회(차집합 : 선행 결과집합에서 공통된 부분(행)을 제거한 결과를 리턴)
select emp_id,
emp_name,
dept_code,
salary
from employee
where dept_code = 'D5'
minus --아래꺼 빼기 처리함(작성된 query의 순서가 중요함)
select emp_id,
emp_name,
dept_code,
salary
from employee
where salary >= 3000000;
grouping sets
그룹별로 처리된 여러 개의 select 문을 하나로 합친 결과를 원할 때 사용
set operator(집합연산자) 사용한 결과와 동일한 결과를 얻을 수 있음
Select Dept_Code, Job_Code, Manager_Id, Floor(Avg(Salary))
From Employee
Group By Grouping Sets((Dept_Code, Job_Code, Manager_Id), (Dept_Code, Manager_Id), (Job_Code, Manager_Id));
'프로그래밍 > SQL' 카테고리의 다른 글
05.19(join의 종류) (0) | 2020.05.19 |
---|---|
05.18(join) (0) | 2020.05.18 |
05.14(group by & having) (0) | 2020.05.14 |
05.13(Oracle 내장 함수) (0) | 2020.05.13 |
05.12(SQL기본 구문 select, where, order by) (0) | 2020.05.12 |