hyeonga_code

Database_33_ANSI JOIN_OUTER JOIINNER JOIN 본문

Oracle Database

Database_33_ANSI JOIN_OUTER JOIINNER JOIN

hyeonga 2023. 7. 31. 06:59
반응형

   -- Outer / Inner JOIN
            -- Outer : JOIN 절에서 제외된 데이터
            -- Inner : JOIN 절에서 포함된 데이터
        -- Inner JOIN_내부 조인
            -- 모든 조건을 만족하는 데이터만 조회합니다.
            -- 조인 조건을 충족하지 못하는 행은 결과에 출력되지 않습니다.
            -- 조인 조건을 충족하는 행만 결과로 출력합니다.
            -- Outer가 발생합니다.
        -- Outer JOIN_포괄 조인 
            -- Inner JOIN 결과 데이터에 Outer 데이터를 결합하여 조회합니다.
        -- LEFT/RIGHT JOIN
            -- OUTER를 기준으로 Outer 데이터를 조회할 테이블을 지정합니다.
            -- 두 테이블을 조인하며 내부 조인의 결과와 함께 일치하지 않는 왼쪽 또는 오른쪽 테이블의 행을 반환하는 조인입니다.
        -- FULL OUTER JOIN
            -- 두 테이블을 조인하며 내부 조인의 결과와 함께 모든 행을 반환하는 조인입니다.
            
        -- LEFT OUTER JOIN
SELECT e.employee_id, e.last_name, d.department_name
FROM employees e LEFT OUTER JOIN departments d 
ON (e.department_id = d.department_id);
    /* 
    EM_ID    LAST_NAME        DEPARTMENT_NAME               
    ----------- ------------------------- ------------------------------
        200     Whalen                  Administration                
        202     Fay                        Marketing                     
        201     Hartstein                Marketing                     
        144     Vargas                   Shipping                      
        143     Matos                    Shipping                      
        142     Davies                   Shipping                      
        141     Rajs                      Shipping                      
        124     Mourgos               Shipping                      
        107     Lorentz                  IT                            
        104     Ernst                     IT                            
        103     Hunold                  IT                            
        176     Taylor                    Sales                         
        174     Abel                      Sales                         
        149     Zlotkey                 Sales                         
        102     De Haan               Executive                     
        101     Kochhar                Executive                     
        100     King                      Executive                     
        206     Gietz                     Accounting                    
        205     Higgins                 Accounting                    
        178     Grant                                             
        -- 부서가 없는 직원의 데이터를 employees 테이블에서 조회합니다.
    */


    
    -- RIGHT OUTER JOIN
SELECT e.employee_id, e.last_name, d.department_name
FROM employees e RIGHT OUTER JOIN departments d 
ON (e.department_id = d.department_id);
    /*
    EM_ID   LAST_NAME    DEPARTMENT_NAME            
    ----------------------------------------------------------  
    200         Whalen             Administration        
    201         Hartstein           Marketing        
    202         Fay                   Marketing        
    124         Mourgos            Shipping        
    144         Vargas              Shipping        
    143         Matos                Shipping        
    142         Davies              Shipping        
    141         Rajs                  Shipping        
    107         Lorentz             IT        
    104         Ernst                 IT        
    103         Hunold              IT        
    174         Abel                  Sales        
    149         Zlotkey             Sales        
    176         Taylor               Sales        
    102         De Haan          Executive        
    100         King                 Executive        
    101         Kochhar           Executive        
    206         Gietz                Accounting        
    205         Higgins            Accounting        
    ( null )      ( null )            Contracting        
            -- 직원이 없는 부서를 departments 테이블에서 조회합니다.
    */


        -- FULL OUTER JOIN
SELECT e.employee_id, e.last_name, d.department_name
FROM employees e FULL OUTER JOIN departments d 
ON (e.department_id = d.department_id);
    /*
    EM_ID    LAST_NAME    DEPARTMENT_NAME        
    ----------------------------------------------------------
    100         King                   Executive        
    101         Kochhar             Executive        
    102         De Haan            Executive        
    103         Hunold              IT        
    104         Ernst                 IT        
    107         Lorentz              IT        
    124         Mourgos           Shipping        
    141         Rajs                  Shipping        
    142         Davies              Shipping        
    143         Matos               Shipping        
    144         Vargas              Shipping        
    149         Zlotkey             Sales        
    174         Abel                 Sales        
    176         Taylor               Sales        
    178         Grant                ( null )         
    200         Whalen             Administration        
    201         Hartstein           Marketing        
    202         Fay                   Marketing        
    205         Higgins             Accounting        
    206         Gietz                Accounting        
    ( null )     ( null )              Contracting        
    */


    
        -- Outer 행만 출력하고 싶은 경우
SELECT e.last_name, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON ( e.department_id = d.department_id)
MINUS
SELECT e.last_name, d.department_name
FROM employees e JOIN departments d
ON ( e.department_id = d.department_id);
    /*
    LAST_NAME   DEPARTMENT_NAME
    ----------------------------------------------------
    Grant             ( null )
    ( null )            Contracting
    */


    
        -- 부서 이름을 사용하여 부서별 총 급여, 인원 수 조회
SELECT department_name, SUM(salary), COUNT(*)
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
GROUP BY department_name;
    /*
    DP_NAME       SUM(SALARY)   COUNT(*)        
    -------------------------------------------------------------
    Administration        4400                 1
    Accounting           20300                 2
    IT                         19200                 3
    Executive             58000                 3
    Shipping              17500                  5
    Sales                    30100                 3
    Marketing             19000                 2
    */


    
   

반응형