개발 도중에 잘 몰랐던 쿼리문을 개발팁 형식으로 정리해 보았습니다.
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