< 집합연산자(Set Operator) >
- 여러개의 쿼리문을 가지고 하나의 쿼리문으로 만드는 연산자
- 편의성은 좋으나, 구문이 길어져 유지보수가 힘들어지는 단점이 존재
- 다른 구문으로도 충분히 대체 가능. 단, UNION ALL 대체 불가!!
> UNION (합집합)
- 두 쿼리문을 수행한 결과값을 더할 때, 중복되는 결과는 한 번만 조회
- OR 연산자로 대체 가능
-- 부서코드가 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명 (선동일,송종기,노옹철,유재식,정중하,심봉선,대북혼,전지연)
-- 부서코드가 D5거나 또는 급여가 300만원 초과인 사원들 조회(사번,사원명, 부서코드, 급여)
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; --> 12명 조회(6명 + 8명 - 2명)
-- 두 쿼리의 SELECT절이 같아야한다.
--------- OR로 대체 가능 ------------------------
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5' OR SALARY > 3000000;
-- OR연산자로 두 개의 조건을 엮어서 조회하면 결과는 동일
> INTERSECT (교집합)
- 여러 쿼리 결과에서 중복된 결과만을 조회
- AND 연산자로 대체 가능
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; --> 중복되는 2명 조회
---------- AND로 대체 가능 ---------------------
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5' AND SALARY > 3000000;
-- AND로 대체 가능
> 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; --> 6 + 8 = 14명 조회 (중복된 값도 포함됨)
> 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; --> 4명 조회 (6명 - 중복되는 2명 제외)
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5' AND SALARY <= 3000000; -- 조건식을 조금 바꾸면 대체 가능
'개발 > SQL' 카테고리의 다른 글
[SQL] Oracle - (DDL) CREATE / 제약조건(CONSTRAINTS) (0) | 2022.09.29 |
---|---|
[SQL] Oracle - 서브쿼리(SUBQUERY) / 인라인 뷰(INLINE-VIEW) (0) | 2022.09.29 |
[SQL] Oracle - (JOIN) 자체조인 (SELF JOIN) / 다중조인 (0) | 2022.09.28 |
[SQL] Oracle - (JOIN) 카테시안곱, 교차조인 / 비등가조인 (0) | 2022.09.28 |
[SQL] Oracle - (JOIN) 포괄조인, 외부조인, 아우터조인 (0) | 2022.09.28 |