hyeonga_code

Database_13_데이터 제한 및 관리_SET, UNION, UNION ALL, INTERSECT, MINUS, ORDER BY 본문

Oracle Database

Database_13_데이터 제한 및 관리_SET, UNION, UNION ALL, INTERSECT, MINUS, ORDER BY

hyeonga 2023. 7. 16. 05:59
반응형

-- SET 연산자
    -- 규칙
        -- 비교하는 컬럼의 수가 동일해야 합니다.
            -- 컬럼의 수를 일치시키기 위해 숫자형의 경우 상수를 지정할 수 있습니다.
        -- 비교하는 컬럼의 데이터 타입이 동일해야 합니다.
        -- 컬럼을 여러 개를 비교할 수 있지만 집합이 어지러울 수 있습니다.
        -- 결과는 자동으로 정렬되어 출력됩니다.
    -- UNION : 합집합 (중복을 제거합니다.)
    -- UNION ALL : 합집합 (중복을 제거하지 않습니다.)
    -- INTERSECT : 교집합
    -- MINUS : 차집합  (A-B != B-A)
    -- [ SELECT ] UION/UNION ALL/INTERSECT/MINUS [ SELECT ] ;
    
        -- 실습에 사용할 테이블 정보를 확인합니다.
SELECT *
FROM job_history;
    /*      
    EM_ID    START_DATE        END_DATE    JOB_ID              DP_ID
    --------------------------------------------------------------------------------------------
    102         08/01/13             13/07/24             IT_PROG                60
    101         04/09/21             08/10/27             AC_ACCOUNT      110
    101         08/10/28             12/03/15             AC_MGR               110
    201         11/02/17             14/12/19             MK_REP                 20
    200         02/09/17             08/06/17             AD_ASST               90
    176         13/03/24             13/12/31             SA_REP                 80
    176         14/01/01             14/12/31             SA_MAN                 80
    200         09/07/01             13/12/31             AC_ACCOUNT       90
    */



    -- UNION
        -- 두 질의의 결과를 중복을 제거한 후 반환합니다.
SELECT employee_id id FROM employees
UNION
SELECT employee_id id FROM job_history;
    /*
    ID
    -----
    100
    101
    102
    */

    
    -- UNION ALL
        -- 두 질의의 결과를 중복을 포함하여 반환합니다.
SELECT employee_id id, job_id FROM employees
UNION ALL
SELECT employee_id id, job_id FROM job_history;      
    /*
    ID        JOB_ID
    --------------------------
    100       AD_PRES
    101       AD_VP
    102       AD_VP

...
    */

   
        
    -- INTERSECT
        -- 여러 질의에 공통적인 행을 모두 반환합니다.
SELECT employee_id id FROM employees
INTERSECT
SELECT employee_id FROM job_history;  
    /*
    ID  
    -----
    101
    102
    176
    200
    201
    */


        
    -- MINUS
        -- 교환 법칙이 성립하지 않습니다.
SELECT employee_id id FROM employees
MINUS
SELECT employee_id FROM job_history;  

    
-- SELECT 문의 일치
    -- 컬럼 개수를 일치시키기 위해 숫자열의 경우 상수를 지정할 수 있습니다.
SELECT employee_id, job_id, salary
FROM employees
UNION
SELECT employee_id, job_id, -1
FROM job_history;



-- ORDER BY _ 결과 정렬
    -- ASC : 오름차순으로 정렬합니다.
    -- DESC : 내림차순으로 정렬합니다.
    -- 문장의 마지막에 작성합니다.
    -- 따로 작성하지 않는 경우 오름차순이 기본입니다.
SELECT employee_id id, last_name, salary, hire_date, department_id DP_ID
FROM employees
ORDER BY salary DESC;
    /*
    ID  LAST_NAME   SALARAY     HIER          DP_ID
    -------------------------------------------------------------------
    100 King                     24000       02/06/17       90
    101 Kochhar                 17000     04/09/21       90

    ...
    */


    -- 컬럼을 두 개 이상 정렬을 설정하는 경우 첫 컬럼의 정렬 이후, 동일한 값을 가진 내에서 정렬을 합니다.
    -- 컬럼이 두 개 이상 내림차순으로 정렬하는 경우 각각 지정해야합니다.
SELECT employee_id id, last_name, salary, hire_date, department_id DP_ID
FROM employees
ORDER BY department_id DESC, salary DESC;
    /*
    ID  LAST_NAME   SALARAY   HIER          DP_ID
    --------------------------------------------------------------------
    178 Grant                 7000       14/05/24       ( null )
    205 Higgins            12000       09/06/07       110
    206 Gietz                  8300       09/06/07       110
    ...
    */


    
    -- WHERE 절에는 별칭으로 대신 작성할 수 없습니다.
SELECT employee_id id, last_name, salary, hire_date, department_id DP_ID
FROM employees
WHERE Salary*12 > 120000
ORDER BY department_id DESC, salary DESC;
    /*
    ID  LAST_NAME   SALARAY   HIER_DATE    DP_ID
    ----------------------------------------------------------------------
    205 Higgins           12000       09/06/07             110
    100 King                24000       02/06/17               90
    ...
    */

반응형