4장: 사례 이해를 위한 필수 사항
1-1 ROWNUM
※ rownum의 속성에 대하여
-- rownum에 대해 알아 두어야 할 사실
첫째. 정의: rownum은 where절 (where절 없으면 from절)에 의해 추출된 DATA SET에 row 단위로 붙는 순번이다.
둘째. where절에 rownum을 조건으로 줄 때에는 항상 다른 조건을 모두 만족시킨 결과에 대해 조건이 반영된다.
셋째, order by 절을 사용할 때에는 우선 rownum이 부여되고 난 후 해당 결과 집합에 대해 sort를 하게 된다.
(순서) rownum --> order by
① 단순 조회 시
select rownum, emp_id, emp_name
from temp
where lev = '수습';
1 20000101 이태백
2 20000102 김설악
3 20000203 최오대
4 20000334 박지리
5 20000305 정북악
6 20006106 유도봉
7 20000407 윤주왕
8 20000308 강월악
9 20000119 장금강
10 20000210 나한라
--> 별도 정렬 없이 temp 자료 중에서 "lev=수습"인 값을 보여줌
② 단순 조회 + 조건 추가 (where emp_id >0)
select rownum, emp_id, emp_name
from temp
where emp_id >0
and lev = '수습';
1 20000101 이태백
2 20000102 김설악
3 20000119 장금강
4 20000203 최오대
5 20000210 나한라
6 20000305 정북악
7 20000308 강월악
8 20000334 박지리
9 20000407 윤주왕
10 20006106 유도봉
where emp_id >0 조건이 추가되면서, 별도의 order by 절 없이도 emp_id 순으로 ascending 하여 자료가 출력됨.
③ rownum을 이용한 필터링 (and rownum < 5)
select rownum, emp_id, emp_name
from temp
where emp_id >0
and lev = '수습'
and rownum < 5;
1 20000101 이태백
2 20000102 김설악
3 20000119 장금강
4 20000203 최오대
②번에서 출력된 자료에 and rownum < 5 라는 조건을 통해 emp_id 순으로 상위 4개 값만 출력(필터링)된 것을 알 수 있다.
!!주의!! rownum 조건을 이용한 필터링 시에는 <, <= 두 개 연산자 외에는 결과 값이 출력되지 않는다
*예외적으로 1과 비교할 때는 =(같다)로 비교가능하다.
④ rownum을 이용한 필터링 + order by 구문 추가
select rownum, emp_id, emp_name
from temp
where emp_id >0
and lev = '수습'
and rownum < 5
order by emp_name;
2 20000102 김설악
1 20000101 이태백
3 20000119 장금강
4 20000203 최오대
③번에 order by emp_name 절을 추가하였다. 이때 첫번째, ③번의 결과집합은 그대로 가져감. 둘째, ③번에서 확인했던 rownum은 바뀌지 않음을 알 수 있다.
즉, 'and rownum < 5' 구문으로 필터링 시 각 레코드에 대해 rownum 번호가 부여되며, 이후 order by를 이용한 sort가 이뤄졌단 사실을 알 수 있다.
연습문제 Q/A : 04-1 ROWNUM의 이용
--> TEMP 테이블의 자료를 이용하여 SELECT 결과를 3개행씩 묶어 하나의 번호를 부여하는 SQL을 만들어보자. ROWNUM, 부여된번호, EMP_ID, EMP_NAME을 보여주면 된다.
나의답변)
select rownum, trunc((rownum-1)/3)+1 as "부여된번호", emp_id, emp_name
from temp;
모범답안)
select rownum, ceil(rownum/3) as "부여된번호", emp_id, emp_name from temp;
* ceil : 지정된 값 이상의 가장 작은 정수를 리턴하는 함수
1-2 ROWID
'Oracle_DB_Unix admin > (6)오라클 실습 (이채남 저)' 카테고리의 다른 글
4장 2절: DECODE 함수의 활용 (0) | 2016.03.11 |
---|---|
3-5장 ANY와 ALL (0) | 2016.03.01 |
CORERELATED 서브쿼리 (연관성 있는 서브쿼리) (0) | 2016.02.10 |