반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

Oracle SQL - 집합 연산자 SET OPERATOR(UNION, UNION ALL, INTERSECT, MINUS) 본문

Oracle SQL/Oracle SQL

Oracle SQL - 집합 연산자 SET OPERATOR(UNION, UNION ALL, INTERSECT, MINUS)

yeonee 여니 2023. 6. 1. 20:58
728x90
반응형
SMALL

안녕하세요.

#yeoneeblog 여니입니다 :)

 

 

/*
    <집합 연산자 SET OPERATOR>
    
    여러개의 쿼리문을 가지고 하나의 쿼리문으로 만드는 연산자
    
    -UNION(합집합) : 두 쿼리문을 수행한 결과값을 더한 후 중복되는 부분은 한번만 빼서 중복을 제거한것
    
    -UNION ALL : 두 쿼리문을 수행한 결과값을 더한 후 중복값은 제거하지 않고 그대로둔것
    
    -INTERSECT(교집합) : 두 쿼리문을 수행한 결과값의 중복된 부분만 가져온것
    
    -MINUS(차집합) : 선행 쿼리문 결과값에서 후행 쿼리문 결과값을 뺀 나머지 부분
    
    주의해야할점 : 두 쿼리문의 결과를 합쳐서 한개의 테이블로 보여줘야하기 때문에
                            두 쿼리문의 SELECT절 부분은 같아야한다.(조회할 컬럼명이 일치해야함)


*/
-- 1. UNION(합집합) : 두 쿼리문을 수행한 결과값을 더해주지만, 중복값은 제거
-- ★자주 쓰여요★


-- 부서코드가 D5이거나(OR), 또는 급여가 300만원 초과인 사원들 조회(사번, 사원명, 부서코드, 급여)

SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5' --> 6명 조회
UNION --> 위의 ; 삭제 후 실행 ( 중복값은 제거됨 )
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY > 3000000; --> 8명 조회

-- 직급코드가 J6이거나 부서코드가 D1인 사원들을 조회(사번, 사원명, 부서코드, 급여)
-- OR연산자 버전
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE JOB_CODE = 'J6' OR DEPT_CODE = 'D1';

-- UNION 연산자 버전
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D1'
UNION
SELECT EMP_ID, EMP_NAME, JOB_CODE, SALARY
FROM EMPLOYEE
WHERE JOB_CODE = 'J6';

-- 2. UNION ALL : 여러개의 쿼리결과를 더해서 보여주는 연산자(중복제거 안함)
-- 직급코드가 J6이거나 부서코드가 D1인 사원들을 조회
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE JOB_CODE = 'J6' -- 6명
UNION ALL
SELECT EMP_ID, EMP_NAME, JOB_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D1'; -- 3명

-- 3. INTERSECT : 교차합, 쿼리결과중 중복된 결과만을 조회
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE JOB_CODE = 'J6' -- 6명
INTERSECT
SELECT EMP_ID, EMP_NAME, JOB_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D1'; -- 3명

-- AND 연산자 버전
SELECT EMP_ID, EMP_NAME, JOB_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D1' AND JOB_CODE = 'J6'; -- 2명

-- 4. MINUS : 차집합, 선행쿼리문의 결과에 후행 쿼리결과를 뺀 나머지
-- 직급코드가 J6이거나 부서코드가 D1인 사원들을 제외한 나머지 사원들 조회해 보기
SELECT 
    EMP_ID, EMP_NAME, DEPT_CODE, JOB_CODE
FROM EMPLOYEE
WHERE JOB_CODE = 'J6' -- 6명
MINUS
SELECT
    EMP_ID, EMP_NAME, DEPT_CODE, 'J999' JOB_CODE -- ★위의 JOB_CODE와 같은 역할-자주 쓰임
FROM EMPLOYEE
WHERE DEPT_CODE = 'D1'; -- 3명

728x90
반응형
LIST