09. SQL syntax(7) - Rownum
select rownum from ~~~~ order by -> rownum먼저 수행되므로 order by하면 rownum은 섞일 수 있다.
where -> group by -> having -> order by 순서로 진행
rownum은 항상 추출된 1부터 부여된다.
where rownum >= 3 (X) 조건절에 만족하지 아니하면
매번 1부터 넘버링이되고 매번 조건에 만족하지 않으므로 결과가 나오지 않는다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | /* Ex 1 : */ select rownum, id, name, salary from emp_test order by salary desc nulls last; /* Ex 2 : */ select rownum, id, name, salary from emp_test where rownum <=7 order by salary desc nulls last; /* (쓰레기, order by가 나중에 적용) */ /* Ex 3 : */ select rownum, vt.rnum, vt.id, vt.name, vt.salary from (select rownum rnum, id, name, salary from emp_test order by salary desc nulls last) vt where rownum <= 7; /* Ex 4 : */ select rownum, vt.rnum, vt.id, vt.name, vt.salary from (select rownum rnum, id, name, salary from emp_test order by salary desc nulls last) vt where rownum > 7; /* (X) */ | cs |
rownum은 항상 추출된 1부터 부여된다. 조건절에 만족하지 아니하면
매번 첫행부터 1씩 넘버링이되고 매번 조건에 만족하지 않으므로 결과가 나오지 않는다
ROWNUM은 FROM WHERE절에 대한 순번으로서 1부터 시작해야된다.
다음 ROW가 추출 될 때마다 ROWNUM의 값을 순차적으로 증가,
그런데 1이 존재하지 않는다면 다시 1부터 숫자가 부여된다.
다음 순번을 증가부여 할 수 없으므로 아무런 데이터가 추출되지 않는다.
1 2 3 4 5 6 7 | select vt1.rrnum, vt1.rnum, vt1.id, vt1.name, vt1.salary from (select rownum rrnum, vt.rnum vt.id, vt.name, vt.salary from(select Rownum rnum, id, name, salary from emp_test order by salary desc nulls last) vt ) vvt where rownum > 7; | cs |
반응형
'Database > Theory' 카테고리의 다른 글
[Database/Theory] 11. index(1) - 개요, 장단점, 종류 (0) | 2016.06.16 |
---|---|
[Database/Theory] 10. Join(1) (0) | 2016.06.16 |
[Database/Theory]08. SQL syntax(6) - Sub query (0) | 2016.06.07 |
[Database/Theory]07. SQL syntax(5) -Join (0) | 2016.06.07 |
[Database/Theory]06. SQL syntax(4) - Constraint, rest (0) | 2016.06.07 |