SQL*Plus, 문제풀이
Q: 고객성명(CUST_NAME)을 입력 받아(성명을 일부 또는 전체 입력 가능) 고객성명 순으로 25라인을 출력하고 페이징 처리가 가능한 쿼리. 단, 동명이인이 존재.
– 테이블 명
고객 테이블(CUST_TABLE)
– 인덱스 구성
Unique PK = 고객 ID(CUST_ID)
Non unique index = 고객 성명(CUST_NAME)
A:
SELECT CUST_NAME FROM CUST_TABLE WHERE CUST_NAME >= :last_name /* index 사용 */ AND CUST_NAME || rowid > :last_name || last_rowid /* 동명이인을 배제하기 위해 rowid 사용 */ AND rownum <= 25 AND :sw = 'PGDN' UNION SELECT /*+ index_desc(cust cust_name) */ CUST_NAME FROM CUST_TABLE WHERE CUST_NAME <= :first_name AND CUST_NAME || rowid < :first_name || first_rowid AND rownum <= 25 AND :sw = 'PGUP'
UNION: 합집합, SORT가 발생한다(전체범위 처리).
UNION ALL: 중복을 제외한 합집합, SORT가 발생하지 않는다(부분범위 처리).
원문 출처
Encore - 대용량 데이터베이스