전체 방문자
오늘
어제
21종
종이의 코딩 공부방
21종
  • 분류 전체보기 (171)
    • JAVA (64)
    • Springboot (46)
      • 블로그만들기 (45)
    • Database (60)
      • Oracle (60)
    • 프로젝트 3 (CELOVER) (0)
    • 개발서버 구축 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

Database/Oracle

[Oracle] 집합 연산자

2023. 7. 6. 20:29

    < 집합 연산자 == SET OPERATION > 

    여러개의 쿼리문을 가지고 하나의 쿼리문으로 만드는 연산자
    
    - UNION     : OR | 합집합 (두 쿼리문 수행한 결과값을 더한 후 중복되는 값은 한번만 더해지도록)
    - INTERSECT : AND | 교집합 (두 쿼리문 수행한 결과값에 중복된 결과값)
    - UNION ALL : 합집합 + 교집합 (중복되는 부분이 두 번 표현될 수 있음)
    - MINUS     : 선행 결과값에서 후행 결과값을 뺀 나머지(차집합)


    --  부서코드가 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개행 (선동일, 송중기, 노옹철, 유재식, 정중하, 심봉선, 대북혼, 전지연)


-- 1. UNION (합집합)

-- 부서코드가 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;

-- 위의 쿼리문 대신 아래처럼 WHERE 절에 OR 써도 해결 가능

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

-- 2. INTERSECT(교집합)

-- 부서코드가 D5이면서 급여까지도 300만원 초과인 사원 조회

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 EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5' AND SALARY > 3000000;

 

주의사항

 

-- 각 쿼리문의 SELECT절에 작성되어있는 컬럼 개수 동일해야됨!! (아래코드는 안된다)

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

 

-- 컬럼 개수 뿐만 아니라 각 컬럼 자리마다 동일한 타입으로 기술해야됨!(아래코드는 안된다)

SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
UNION 
SELECT EMP_ID,EMP_NAME, DEPT_CODE, BONUS --HIRE_DATE
FROM EMPLOYEE
WHERE SALARY > 3000000;

 

-- ORDER BY 절을 붙이고자 한다면 마지막에 기술해야됨!!

SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
--ORDER BY EMP_NAME
UNION 
SELECT EMP_ID,EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY > 3000000
ORDER BY EMP_NAME;

-- 3. 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
ORDER BY EMP_NAME;


-- 4. MINUS 

-- 선행 SELECT 결과에서 후행 SELECT 결과를 뺀 나머지 (차집합)

 

-- 부서코드가 D5인 사원들 중 급여가 300만원 초과한 사원들을 제외해서 조회

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;

 

-- 아래처럼도 가능하긴 함!

SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5' AND SALARY <= 3000000;
    'Database/Oracle' 카테고리의 다른 글
    • [Oracle] JOIN (2) 포괄조인, 외부조인 (OUTER JOIN)
    • [Oracle] JOIN (1) 등가조인(EQUAL JOIN), 내부조인(INNER JOIN)
    • [Oracle] SELECT문 실행 순서
    • [Oracle] HAVING 절
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바