오라클 Cartesian JOIN / SELF JOIN

조수경·2021년 9월 30일
0

Oracle

목록 보기
10/19

2)Cartesian JOIN) --최악인 것

  • 모든 가능한 행들의 조합을 결과로 반환

  • 조인조건이 없거나 잘못 정의된 경우

  • 반드시 필요한 경우가 아니면 사용하지 말것

  • ANSI의 CROSS JOIN과 같은 JOIN

    ex) A 테이블(100행 20열), B테이블(30행 10열)을 카타시안 조인하면
    결과는(3000행 30열)

    사용예)

          SELECT 'CART' AS 테이블명,
                  COUNT(*) AS 자료수
                   FROM CART
                  UNION 
                  SELECT 'BUYPROD', COUNT(*)
                    FROM BUYPROD
                  UNION 
                  SELECT 'PROD', COUNT(*)
                    FROM PROD
    
              SELECT COUNT(*) -- 전체 행의 수
                FROM BUYPROD,CART,PROD;
    
              SELECT COUNT(*) --위와 같은 결과로 출력
              FROM BUYPROD
              CROSS JOIN CART
              CROSS JOIN PROD;
            

    3)SELF JOIN)=--자기가 자기랑 조인

    • 하나의 테이블에 2개 이상의 별칭을 부여하여 자신의 테이블사이에 발생되는 조인

사용예) 사원테이블에서 사원번호 120번 사원의 급여보다 더 많은 급여를 받는 사원의 사원번호, 사원명, 부서번호, 부서명, 급여를 조회하시오**
-- 1. 사원번호 120번 사원을 꺼내는 사원테이블 A
-- 2. 그 값보다 더많이 받는 사원을 뽑는 사원테이블 뽑기 C
-- B는 부서명 뽑기

           SELECT C.EMPLOYEE_ID AS 사원번호, 
                  C.EMP_NAME AS 사원명, 
                  C.DEPARTMENT_ID AS 부서번호, 
                  B.DEPARTMENT_NAME AS 부서명, 
                  C.SALARY AS 급여
             FROM HR.EMP A, HR.DEPT B, HR.EMP C
            WHERE A.EMPLOYEE_ID = 120 -- 사원번호가 120번인
              AND A.SALARY <= C.SALARY  -- 조인 조건(넌이퀴조인): A보다 급여가 많은 C추출
              AND C.DEPARTMENT_ID = B.DEPARTMENT_ID -- 조인 조건(이퀴조인): 부서 번호가 같은
           ORDER BY 3 5 DESC; --3번 부서번호 순서대로 정렬하되 급여가 많은 순으로 정렬하시오
profile
신입 개발자 입니다!!!

0개의 댓글