/* ****************************************************
집합 연산자 (결합 쿼리)
- 둘 이상의 select 결과를 합치는 연산
- 구문
select문 집합연산자 select문 [집합연산자 select문 ...] [order by 정렬컬럼 정렬방식]
-연산자
- UNION: 두 select 결과를 하나로 결합한다. 단 중복되는 행은 제거한다.
- UNION ALL : 두 select 결과를 하나로 결합한다. 중복되는 행을 포함한다.
- 규칙
- 연산대상 select 문의 컬럼 수가 같아야 한다.
- 연산대상 select 문의 컬럼의 타입이 같아야 한다.
- 연산 결과의 컬럼이름은 첫번째 select문의 것을 따른다.
- order by 절은 구문의 마지막에 넣을 수 있다.
*******************************************************/
-- emp 테이블의 salary 최대값와 salary 최소값, salary 평균값 조회
select max(salary), min(salary), avg(salary) from emp;
select '최대값' as 'Label', max(salary) as '집계결과' from emp
union
select '최소값', min(salary) from emp
union
select '평균값', round(avg(salary), 2) from emp;
-- full outer join 정의
-- from A full join B on 조건 -> mysql에서는 구현 불가
-- 양쪽에 중복된게 없다는 것이 확실하거나 중복되도 상관없다면 union all 사용 -> 처리속도가 빠르기 때문이다.
select * from emp e left join dept d on e.dept_id = d.dept_id
union
select * from emp e right join dept d on e.dept_id = d.dept_id
order by salary desc;
-- with rollup
select dept_id, sum(salary) as '급여합계'
from emp
group by dept_id with rollup;
-- 위, 아래 둘다 같은 결과값이 나온다.
select dept_id, sum(salary) as '급여합계'
from emp
group by dept_id
union all
select '총합계', sum(salary) from emp;