SQL*Plus, 문제풀이

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 - 대용량 데이터베이스

Leave a Reply