반응형
집합 연산자 (SET OPERATOR)
여러개의 쿼리문을 하나의 쿼리문으로 만드는 연산자이다
두 쿼리문의 결과를 합하여 한 개의 테이블로 나타낸다
즉, 두 쿼리문의 SELECT절 부분은 동일 해야한다 (조회할 컬럼이 동일)
UNION (합집합) |
두 쿼리문을 수행한 결과 값을 더한 후 중복되는 부분을 한번만 제외하고 중복 제거 -> OR |
UNION ALL (합집합 + 교집합) |
두 쿼리문을 수행한 결과 값을 더한 후 중복 제거 안 함 |
INTERSECT (교집합) |
두 쿼리문을 수행한 결과 값의 중복된 부분만 -> AND |
MINUS (차집합) |
두 쿼리문을 수행한 결과 값의 중복된 부분만 -> AND |
집합별 예제 코드
UNION(합집합)
--합집합 적용 전
--부서코드가 D5인 사원 조회
SELECT EMP_ID,EMP_NAME,DEPT_CODE,SALARY
FROM EMPLOYEE
WHERE DEPT_CODE='D5'; --6명
--급여가 300만원 초과인 사원 조회
SELECT EMP_ID,EMP_NAME,DEPT_CODE,SALARY
FROM EMPLOYEE
WHERE SALARY>3000000; --8명
--중복 사원 2명
--합집합 적용 후
--부서코드가 D5 이거나 급여가 300만원 초과인 사원들 조회(사번,사원명,부서코드,급여) -> OR
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;
--하지만 OR연산자로 하는게 더 간단
SELECT EMP_ID,EMP_NAME,DEPT_CODE,SALARY
FROM EMPLOYEE
WHERE DEPT_CODE='D5' OR SALARY>3000000;
UNION ALL(합집합 + 교집합)
SELECT EMP_ID,EMP_NAME,DEPT_CODE,JOB_CODE
FROM EMPLOYEE
WHERE JOB_CODE='J6'
UNION ALL
SELECT EMP_ID,EMP_NAME,DEPT_CODE,JOB_CODE
FROM EMPLOYEE
WHERE DEPT_CODE='D1'; --9명 / UNION때는 7명
INTERSECT(교집합)
--직급코드가 J6이고 부서코드가 D1인 사원들을 조회(사번,사원명,부서코드,직급코드)
SELECT EMP_ID,EMP_NAME,DEPT_CODE,JOB_CODE
FROM EMPLOYEE
WHERE JOB_CODE='J6'
INTERSECT
SELECT EMP_ID,EMP_NAME,DEPT_CODE,JOB_CODE
FROM EMPLOYEE
WHERE DEPT_CODE='D1'; --중복자는 2명
--AND 연산자로 가능
SELECT EMP_ID,EMP_NAME,DEPT_CODE,JOB_CODE
FROM EMPLOYEE
WHERE JOB_CODE='J6' AND DEPT_CODE='D1';
MINUS(차집합)
--직급코드가 J6이고 부서코드가 D1인 사원들을 조회(사번,사원명,부서코드,직급코드)
SELECT EMP_ID,EMP_NAME,DEPT_CODE,JOB_CODE
FROM EMPLOYEE
WHERE JOB_CODE='J6'
MINUS
SELECT EMP_ID,EMP_NAME,DEPT_CODE,JOB_CODE
FROM EMPLOYEE
WHERE DEPT_CODE='D1'; --4명, 부서코드 J6 인원 6명 중 중복2명 제거한 값
반응형
'DB(SQL)' 카테고리의 다른 글
[SQL] JOIN - 등가조인, 내부조인 (0) | 2022.03.26 |
---|---|
[SQL] JOIN 기본 정의 (0) | 2022.03.26 |
[SQL] GROUP BY, HAVING 절 (0) | 2022.03.26 |
[SQL] 함수의 정의와 단일행 함수와 그룹함수 (0) | 2022.03.26 |
[SQL] 그룹 함수 - SUM, AVG, MIN, MAX, COUNT (0) | 2022.03.26 |