ABOUT ME

-

Today
-
Yesterday
-
Total
-

  • [오라클(ORACLE)/SQL] Oracle(오라클) 다건 조회시 페이징 처리 쿼리문
    개발자 레퍼런스 2009. 3. 4. 19:48
    반응형
    개발 도중에 잘 몰랐던 쿼리문을 개발팁 형식으로 정리해 보았습니다.

    SELECT ARRAY (셀렉트 배열)을 사용하여 다건 조회를 하며 ROWNUM(로우넘)의 사용법을 케이스별로 실제 사용하여 적용해 보았던 오라클 쿼리문들 입니다. (그러므로 문법상 오류는 없습니다.)

    이해하고 보면 쉽지만 잘 몰랐을대는 정말 헷갈리는 쿼리문 이구요.

    Oracle(오라클) 및 SQL을 사용하여 개발 하시는데 도움이 되는 유용한 팁이라 생각되어 공유합니다.

    먼저 기본이 되는 다건조회 쿼리문 입니다.
    1. 다음 조회 KEY one
    SELECT *
      FROM
    (
           SELECT  tup_comp_no tup_comp_no          
                  ,tup_conm    tup_conm       
                  ,bzno        bzno           
                  ,copno       copno          
             FROM tb_cs_jh_cm_tupcomp
            WHERE tup_comp_no >= :tup_comp_no
         ORDER BY tup_comp_no
    )
    WHERE ROWNUM <= 21

    2. 다음 조회 KEY two
    SELECT *
      FROM
    (
           SELECT  tup_comp_no tup_comp_no          
                  ,tup_conm    tup_conm       
                  ,bzno        bzno           
                  ,copno       copno          
             FROM tb_cs_jh_cm_tupcomp
            WHERE bzno    =   :bzno  AND
            (  bzno   >   :bzno  OR  (tup_comp_no >=   :tup_comp_no))
         ORDER BY tup_comp_no,bzno
    )
    WHERE ROWNUM <= 21

    3. 다음 조회 KEY two
    SELECT *
      FROM
    (
           SELECT  tup_comp_no tup_comp_no          
                  ,tup_conm    tup_conm       
                  ,bzno        bzno           
                  ,copno       copno          
             FROM tb_cs_jh_cm_tupcomp
            WHERE copno          = :copno AND
             ( copno   >  :copno OR  (tup_comp_no >=  :tup_comp_no))
         ORDER BY tup_comp_no,copno
    )
    WHERE ROWNUM <= 21

    4. 다음 조회 KEY two (LIKE %)
    SELECT *
      FROM
    (
           SELECT  tup_comp_no tup_comp_no          
                  ,tup_conm    tup_conm       
                  ,bzno        bzno           
                  ,copno       copno          
             FROM tb_cs_jh_cm_tupcomp
            WHERE tup_conm LIKE :tup_conm || '%'
             AND tup_comp_no >=  :tup_comp_no
            ORDER BY tup_comp_no, tup_conm
    )
    WHERE ROWNUM <= 21


    조금 더 복잡한 다건조회 쿼리문 입니다.

    1. by 가맹점번호 ( *기준키: mcht_no, *서브키 : mcht_grp_no, apl_st_dt  * 다음 조회 KEY 3개)
    SELECT *
     FROM
    (
     SELECT  a.mcht_grp_no,
             b.mcht_grpnm,
             a.mcht_no,
             c.mcht_mtalnm,
             a.apl_st_dt,
             a.apl_ed_dt
     FROM  tb_cs_jh_ch_mchtgrp  a,
           tb_cs_jh_cm_mchtgrp  b,
           tb_cs_mc_cm_bsc      c
     WHERE  a.mcht_no     =  :mcht_no
       AND (:bas_dt BETWEEN a.apl_st_dt AND a.apl_ed_dt)
       AND (a.mcht_grp_no > :mcht_grp_no
           OR (a.mcht_grp_no = :mcht_grp_no AND a.apl_st_dt >= :apl_st_dt ))
      AND  b.mcht_grp_no  =  a.mcht_grp_no 
       AND  b.apl_st_dt    =  a.apl_st_dt 
       AND  c.mcht_no      =  a.mcht_no
     ORDER BY
           a.mcht_no, a.mcht_grp_no, a.apl_st_dt
    )
    WHERE ROWNUM <= 21
          
    2. by 가맹점그룹번호 ( *기준키: mcht_grp_no, *서브키 : mcht_no, apl_st_dt  * 다음 조회 KEY 3개)
    SELECT *
     FROM
    (
     SELECT  a.mcht_grp_no,
             b.mcht_grpnm,
             a.mcht_no,
             c.mcht_mtalnm,
             a.apl_st_dt,
             a.apl_ed_dt
     FROM  tb_cs_jh_ch_mchtgrp  a,
           tb_cs_jh_cm_mchtgrp  b,
           tb_cs_mc_cm_bsc      c
     WHERE  a.mcht_grp_no     =  :mcht_grp_no
       AND (:bas_dt BETWEEN a.apl_st_dt AND a.apl_ed_dt)
       AND (a.mcht_no > :mcht_no
           OR (a.mcht_no = :mcht_no AND a.apl_st_dt >= :apl_st_dt ))
      AND  b.mcht_grp_no  =  a.mcht_grp_no 
       AND  b.apl_st_dt    =  a.apl_st_dt 
       AND  c.mcht_no      =  a.mcht_no
     ORDER BY
           a.mcht_grp_no, a.mcht_no, a.apl_st_dt
    )
    WHERE ROWNUM <= 21
         
    3. by 가맹점그룹명 ( *기준키: mcht_mtalnm||'%',*서브키 : mcht_grp_no, apl_st_dt  * 다음 조회 KEY 3개)
    SELECT *
     FROM
    (
     SELECT  a.mcht_grp_no,
             b.mcht_grpnm,
             a.mcht_no,
             c.mcht_mtalnm,
             a.apl_st_dt,
             a.apl_ed_dt
     FROM  tb_cs_jh_ch_mchtgrp  a,
           tb_cs_jh_cm_mchtgrp  b,
           tb_cs_mc_cm_bsc      c
     WHERE  c.mcht_mtalnm LIKE :mcht_mtalnm||'%'
       AND (:bas_dt BETWEEN a.apl_st_dt AND a.apl_ed_dt)
       AND (a.mcht_grp_no > :mcht_grp_no
           OR (a.mcht_grp_no = :mcht_grp_no AND a.apl_st_dt >= :apl_st_dt ))
      AND  b.mcht_grp_no  =  a.mcht_grp_no 
       AND  b.apl_st_dt    =  a.apl_st_dt 
       AND  c.mcht_no      =  a.mcht_no
     ORDER BY
           a.mcht_no, a.mcht_grp_no, a.apl_st_dt     
    )
    WHERE ROWNUM <= 21
    4.by 가맹점명 ( *기준키: mcht_grpnm||'%', *서브키 : mcht_no, apl_st_dt  * 다음 조회 KEY 3개)
    SELECT *
     FROM
    (
     SELECT  a.mcht_grp_no,
             b.mcht_grpnm,
             a.mcht_no,
             c.mcht_mtalnm,
             a.apl_st_dt,
             a.apl_ed_dt
     FROM  tb_cs_jh_ch_mchtgrp  a,
           tb_cs_jh_cm_mchtgrp  b,
           tb_cs_mc_cm_bsc      c
     WHERE  b.mcht_grpnm LIKE :mcht_grpnm||'%'
       AND (:bas_dt BETWEEN a.apl_st_dt AND a.apl_ed_dt)
       AND (a.mcht_no > :mcht_no
           OR (a.mcht_no = :mcht_no AND a.apl_st_dt >= :apl_st_dt ))
      AND  b.mcht_grp_no  =  a.mcht_grp_no 
       AND  b.apl_st_dt    =  a.apl_st_dt 
       AND  c.mcht_no      =  a.mcht_no
     ORDER BY
           a.mcht_grp_no, a.mcht_no, a.apl_st_dt
    )
    WHERE ROWNUM <= 21

    반응형

    댓글

Designed by Tistory.