[Oracle] 집합 연산자 ( UNION / UNION ALL / INTERSECT / MINUS )

라라·2023년 4월 4일
0

Oracle

목록 보기
13/16

📂 집합 연산자

☑️ 여러 개의 SELECT 문을 한 개의 결과(RESULT SET) 으로 출력해 주는 것
☑️ 첫번째 SELECT 문의 컬럼수와 이후 SELECT 문의 컬럼수가 같아야 한다.
☑️ 각 컬럼별 데이터 타입도 동일해야 한다.

➡️ EX) SELECT 문 UNION SELECT 문
➡️ 두 개 이상의 SELECT 문을 합치는 연산자



📍 UNION

👉 중복값은 1개만 조회된다.

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

👉 중복값이 모두 조회된다.

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;



📍 MINUS

👉 중복값은 빼고 조회된다.

SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
MINUS
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY >= 3000000;



📍 INTERSECT

👉 중복값만 조회된다.

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;



📍 사용 시 주의할 점

❗ 두 SELECT 문의 컬럼의 수가 다르면 안된다.
❗ 두 SELECT 문의 컬럼 타입도 맞춰야 한다.

SELECT EMP_ID, EMP_NAME, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
UNION
SELECT EMP_ID, EMP_NAME, SALARY, BONUS -- 컬럼 수 달라 실행 불가
FROM EMPLOYEE
WHERE SALARY >= 3000000;

profile
코딩하는 라라 :)

0개의 댓글