[DB] SQLP 실기 - 5

최민석·2021년 9월 4일
0

많은 건수테이블 에서 존재하는지 검사

위 쿼리에서 order 테이블이 가장 크기가 크지만, orderdt 의 날짜가 2009년 이후인지만 체크하고 있다.

2009년 이후 모든 데이터를 가져와 중복제거를
->
원하는 데이터만 가져와 2009년 이후인지만 Exists

create index order_01 on order (prod_id, orderdt);

select /*+ leading(m p) use_nl(p) index(p idx_product_12_01)*/
p.m_code, m.m_name
from product_12 p, manuf_12 m
where p.m_code = m.m_code
and exists (
			select /*+ nl_sj index(o oder_01) */ 'x'
            from order_12 o
            where o.orderdt >= '20090101'
            and o.prod_10 = p.prod_id
            )
            group by p.m_code, m.m_name
            
            

위처럼 m 테이블 풀스캔,(50건) 을 상품테이블과 조인하고, (1: M 관계라서 나중에 group by 해줘야함)
조인된 상품을 주문테이블과 nl_sj 하여서, 2009년 이후인지만 체크한다.
(세미조인도 인덱스 필수)

조건에 의한 정렬, 페이징, 데이트 컬럼 가공

select a.*
from (select a.*, rownum as ro
      from (select *
            from order o 
            where orderdt like :v_ordmon || '%'
            order by orderdt, empid, case :v_orderbyCol 
            when 'ORDERPRIC' then orderpric 
            when 'ORDERQTY' then orderqty 
            END desc) a
      where rownum <=  :v_cpag * v_ppag) a
where ro > (:v_cpag -1) * v_ppag ;
  • 월별 입력값을 like로 받고 정렬한다.
  • 정렬시 case문으로 변수에 따라 정렬값을 다르게 적용한다.
  • 페이징 쿼리를 정확히 기술한다.
profile
🔥🔥🔥🔥 G U N F E 🔥🔥🔥🔥

0개의 댓글