집합연산자
f
firststep 에디터
IT / 자격증 전문 라이터
2026년 2월 24일873
집합연산자
1) 집합 연산자란?
- 두 개 이상의 SELECT 결과를 하나의 결과로 결합할 때 씁니다.
- 대표 연산자: UNION, UNION ALL, INTERSECT, MINUS(Oracle)
사용 조건(중요)
- 합치는 각 SELECT는 컬럼 개수가 같아야 합니다.
- 각 컬럼의 데이터 타입이 호환되어야 합니다. (숫자↔숫자, 문자↔문자 등)
- 보통 컬럼 이름은 첫 번째 SELECT의 이름이 결과에 사용됩니다.
- 정렬(ORDER BY)은 맨 마지막에 한 번만 붙이는 게 원칙입니다.
2) 종류별로 한 번에 이해하기
UNION (합집합, 중복 제거)
- 두 결과를 합치되 중복 행은 1개로 정리합니다.
- 중복 제거 과정이 있어서 UNION ALL보다 느릴 수 있음.
예시(부서번호 목록 합치기):
SELECT DEPTNO FROM DEPT
UNION
SELECT DEPTNO FROM EMP;
- 결과: DEPT와 EMP에 등장한 DEPTNO를 겹치는 건 한 번만 보여줌
비유
- “A반 명단 + B반 명단 합치기”인데 같은 학생은 한 번만 남김
UNION ALL (합집합, 중복 유지)
- 두 결과를 합치되 중복 행도 그대로 모두 포함합니다.
- 중복 제거를 안 해서 보통 더 빠름.
예시:
SELECT DEPTNO FROM DEPT
UNION ALL
SELECT DEPTNO FROM EMP;
- 결과: EMP에 DEPTNO=30이 여러 번 있으면 30이 여러 줄로 그대로 나옴
비유
- “명단 합치기”인데 중복 학생도 전부 출력(복사본 포함)
INTERSECT (교집합, 공통만)
- 두 결과에 공통으로 존재하는 행만 반환합니다.
예시(둘 다에 존재하는 DEPTNO만):
SELECT DEPTNO FROM EMP
INTERSECT
SELECT DEPTNO FROM DEPT;
- 결과: EMP에도 있고 DEPT에도 있는 DEPTNO만 나옴
- 예: DEPT에는 40이 있는데 EMP에는 40이 없으면 40은 제외
비유
- “두 반 모두에 동시에 들어있는 학생(겹치는 학생)”만 뽑기
MINUS (차집합, A에만 있고 B엔 없는 것) 주로 Oracle
- 첫 번째 SELECT 결과(A) 에서
- 두 번째 SELECT 결과(B) 를 뺀 나머지(“A만의 것”)를 반환합니다.
예시(부서 테이블엔 있는데 직원이 없는 부서 찾기):
SELECT DEPTNO FROM DEPT
MINUS
SELECT DEPTNO FROM EMP;
- 결과: DEPT에는 존재하지만 EMP에는 등장하지 않는 DEPTNO만 출력
(예: 40번 부서에 직원이 없다면 40이 나올 수 있음)
비유
- “A반 명단에서 B반 명단에 있는 학생을 빼고, A반에만 있는 학생만 남기기”
3) 실전에서 자주 하는 실수 2가지
(1) ORDER BY 위치
- 집합 연산에서는 보통 이렇게:
SELECT ...
UNION
SELECT ...
ORDER BY 1;
- 각 SELECT 안에 ORDER BY를 넣으면 DB에 따라 오류/무시될 수 있습니다.
(2) 컬럼 맞추기
- 컬럼 개수/타입이 안 맞으면 에러 납니다.
- 그래서 필요하면 NULL이나 형 변환을 넣어 맞춥니다.
예:
SELECT DEPTNO, DNAME FROM DEPT
UNION ALL
SELECT DEPTNO, JOB FROM EMP;
(둘 다 2컬럼이고, 2번째 컬럼이 문자라면 가능)
한 줄 정리
- UNION: 합치기 + 중복 제거
- UNION ALL: 합치기 + 중복 그대로
- INTERSECT: 공통만
- MINUS: 앞에서 뒤를 빼기(A만 남김)
f
firststep 에디터 · IT / 자격증 전문 라이터
firststep.kr의 실무 에디터로서 무언가를 처음 도전하는 분들이 헤매지 않도록 검증된 지식과 실습 가이드를 작성합니다.
댓글 0개
댓글을 작성하려면 로그인이 필요합니다
간단한 이메일과 비밀번호로 3초 만에 가입하고 의견을 남겨보세요.
첫 번째 댓글을 남겨보세요!