: 둘 이상의 select 결과를 합치는 연산
select문 집합연산자 select문 [집합연산자 select문 ...] [order by 정렬컬럼 정렬방식]
mysql에서는 INTERSECT 와 MIINUS는 지원하지 않음
→ 연산대상 select 문의 컬럼 수가 같아야 함
→ 연산대상 select 문의 컬럼의 타입이 같아야 함
→ 연산 결과의 컬럼이름은 첫번째 select문의 것을 따름
→ order by 절은 구문의 마지막에 넣을 수 있음
→ UNION ALL을 제외한 나머지 연산은 중복되는 행은 제거
ex)
-- emp 테이블의 salary 최대값와 salary 최소값, salary 평균값 조회
select max(salary), min(salary), avg(salary) from emp;
-- 이거를 한 행씩 보고싶다면
select max(salary) from emp
union
select min(salary) from emp
union
select round(avg(salary), 2) from emp;
그리고 여기에 이름을 붙여 준다면
select '최댓값' as "label 1", max(salary) as "집계 결과" from emp
union
select '최솟값', min(salary) from emp
union
select '평균', round(avg(salary), 2) from emp;
+@
from A full outer join B on 조건ex)
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;
만약 union 과 union all 이 상관이 없다면 union all을 사용하는것이 좋다 (겹치는 것을 빼야하는 경우가 아니라면)
→ union all을 사용하는 것이 결과를 보여주는 속도가 더 빠름
order by를 사용하고 싶다면 union 사용 후에 마지막에 추가