[DB] 9. 집합

편준민's avatar
Feb 27, 2025
[DB] 9. 집합

1. 합집합 (union all)

union all은 여러 테이블을 합치는 함수이다. 그냥 합치기 때문에 연산을 하지 않는다. 아래의 코드는 각 부서의 월급의 합과 모든 부서의 합을 합치려고 한다. 하지만 오류가 난다.
-- 1. 한꺼번에 붙이기 select sum(sal),deptno from emp where deptno = 10 union all select sum(sal),deptno from emp where deptno = 20 union all select sum(sal),deptno from emp where deptno = 30 select sum(sal) from emp;
notion image
해당 오류가 나오며 실행 되지 않는다. 디버깅을 해보면 select에서 조회하는 column갯수가 맞지 않기 때문에 오류가 난다.
select sum(sal), null from emp;
위 코드 처럼 null이라는 column을 따로 뽑아주면 실행된다.
notion image
 
튜닝하기
group by를 사용하여 코드를 가독성이 좋게 바꿔보자.
-- 튜닝하기 select sum(sal), deptno from emp group by deptno union all select sum(sal), null from emp;
결과 같음
결과 같음
 

2. 합집합 (union)

unionunion all과 다른 점은 중복이 있다면 결과를 합치기 때문에 연산이 필요하다. 이유는 같은 결과가 있는지 확인을 하려면 두 수의 값을 비교하고 같으면 합쳐야 하기 때문에 연산이 필요하다. 만약 두 테이블을 합치고 싶다면 union all을 사용하는게 더 효율적이다.
-- 2. union (중복을 제거하고 한번에 붙이기) 결과가 같으면 합침 - 중복을 비교하기 떄문에 느려짐 select * from dept where deptno > 10 -- 20, 30, 40 union select * from dept where deptno < 30; -- 10, 20

3. 교집합 (intersect)

intersect두 테이블의 같은 데이터만 조회한다. 하지만 MySQL workspace 툴에서 키워드 인식을 못한다.
-- 3. intersect (교집합 - 툴이 함수도 인식을 못함) select * from dept where deptno > 10 -- 20, 30, 40 intersect select * from dept where deptno < 30; -- 10, 20
notion image

4. 차집합 (except)

except는 두 테이블의 집합에 속하는 데이터를 제외하고 조회하는 함수이다. MySQL workspace 툴에서 키워드 인식은 하지만 빨간 밑줄이 나옴.
-- 4. EXCEPT (차집합 - 툴이 인식은 하지만 오류) select * from dept where deptno > 10 -- 20, 30, 40 EXCEPT select * from dept where deptno < 30; -- 10, 20
notion image
Share article

YunSeolAn