본문 바로가기

데이터베이스/ORACLE

22. SELF JOIN

1. SELF-JOIN (셀프 조인)

  • 하나의 테이블에 두 개의 별칭을 부여하여 조인 연산을 수행하는 방식

예제) 거래처테이블에서 거래처 코드가 'P10101'인 거래처와 같은 지역에 속한 거래처를 조회하시오
       (거래처코드, 거래처명, 주소)

SELECT B.BUYER_ID AS 거래처코드,
       B.BUYER_NAME AS 거래처명,
       B.BUYER_ADD1 ||' '|| B.BUYER_ADD2 AS 주소
  FROM BUYER A, BUYER B
 WHERE UPPER(A.BUYER_ID) = 'P10101'    -- A 테이블은 P10101에대한 자료만 가지게됨
   AND SUBSTR(A.BUYER_ADD1,1,2) = SUBSTR(B.BUYER_ADD1,1,2)
 
   -- 전체자료를 B테이블에서 출력해야한다.

 

예제) 사원테이블에서 부서별 평균 급여를 계산하고 자기 부서의 평균 급여보다 많은 급여를 받는 사원을 조회하시오
        ( Alias는 사원번호, 사원명, 부서번호, 부서명, 급여 )

SELECT A.EMPLOYEE_ID AS 사원번호,
       A.EMP_NAME AS 사원명,
       A.DEPARTMENT_ID AS 부서번호,
       B.DEPARTMENT_NAME AS 부서명,
       A.SALARY AS 급여      
  FROM EMPLOYEES A, DEPARTMENTS B, (SELECT DEPARTMENT_ID AS DEPT_ID, 
                                           ROUND(AVG(SALARY),1) AS SAL_AVG 
                                      FROM EMPLOYEES
                                     GROUP BY DEPARTMENT_ID) C
 WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID
   AND C.DEPT_ID = A. DEPARTMENT_ID
   AND A.SALARY >= C.SAL_AVG
 ORDER BY 3;
 
 
(부서별 평균급여)
SELECT DEPARTMENT_ID 
       ROUND(AVG(SALARY),1) 
  FROM EMPLOYEES
 GROUP BY DEPARTMENT_ID

--부서가 같고 평균급여보다 급여가 많아야한다.

 

2._self_join.sql
0.00MB

 

'데이터베이스 > ORACLE' 카테고리의 다른 글

24. SUB QUERY  (0) 2021.03.16
23. OUTER JOIN  (0) 2021.03.16
21. SEMI JOIN  (0) 2021.03.16
20. TABLE JOIN  (0) 2021.03.16
19. ROLLUP / CUBE  (0) 2021.03.16