[SQLP실기풀이]4장 조인튜닝(4)-고급조인기법 55번

Yu River·2022년 6월 26일
0

SQLP실기연습

목록 보기
27/44

문제 링크 : https://velog.io/@yooha9621/SQLP실기문제-날짜55번

1) 쿼리 튜닝

1.작업지시 테이블 액세스

  • 방문 예정 일자가 선두 컬럼인 인덱스를 사용함과 동시에 작업 구분 코드에 따라 개통접수 테이블 또는 장애접수 테이블과 NL 조인을 한다.

2.개통접수 테이블 액세스

  • 작업지시 테이블로 부터 NL조인이 처리되므로 기존 개통접수_PK 인덱스를 이용한다.

3.장애접수 테이블 액세스

  • 작업지시 테이블로 부터 NL조인이 처리되므로 기존 장애접수_PK 인덱스를 이용한다.

4.작업지시 테이블과의 조인

  • 방문 예정 일자가 선두 컬럼인 인덱스를 한번에 사용하여 나오는 작업 구분코드에 따라 조인 조건을 달리하여 한꺼번에 조인을 시도한다.
    • 따라서 이 때도 각 테이블과 조인할 때 아우터 조인을 해야한다.

2) 튜닝한 SQL문

SELECT 작업일련번호 , 작업자ID , 
DECODE(작업구분코드,'A','개통','B','장애') 작업구분 ,
DECODE(작업구분코드,'A',B.고객번호,'B',C.고객번호) 고객번호 ,
DECODE(작업구분코드,'A',B.주소,'B',C.주소) 주소
FROM 작업지시 A , 개통접수 B , 장애접수 C
WHERE A.방문예정일자 = TO_CHAR(SYSDATE, 'YYYYMMDD')
AND B.개통접수번호(+) = DECODE(작업구분코드,'A',A.접수번호)
AND C.장애접수번호(+) = DECODE(작업구분코드,'B',A.접수번호);

🍎 정리

  • 방문 예정일자가 '오늘' 인 작업지시 데이터를 드라이빙 테이블로 놓고 작업구분코드에 따라 개통접수 테이블과 장애접수 테이블 각각 NL 아우터 조인하여 UNION ALL 처리한다.
  • 날짜 비교는 방문예정일자 = TO_CHAR(sysdate , 'YYYYMMDD') 로 했다.

😥 헷갈렸던 부분

  • 방문예정일자 는 말그대로 연-월-일 까지만 나와있는 걸 나타낸다.
  • 조인조건을 A.접수번호 = DECODE(작업구분코드,'A',B.개통접수번호,'B','C.장애접수번호') 이렇게 A의 작업구분코드에 따라 B의 개통접수번호 또는 C의 장애접수번호로 조인되도록 썼는데 답안엔 이렇게 나와있지 않다.이렇게 쓰면 안되는건가..?
    • 우선 각 테이블 마다 각각 조인 조건을 나누고 아우터 조인으로 시도했다.
  • DECODE 문을 작업구분 코드가 'A'가 아니면 NULL로 표기하는 법
    • DECODE(작업구분코드,'A',A.접수번호)
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글