rownum은 때때로 매우 유용하게 쓰일 수 있지요.
rownum은 오라클에 있는 슈도(Pseudo) 컬럼이구요, mysql에는 없습니다.
슈도 컬럼이 뭐냐? 라고 질문하려고 하셨죠?
네, 그것은 특별한 기능을 하는 컬럼인데요,
테이블 작성시 임의로 만들 필요없이 원래 오라클에 기본적으로 있는 컬럼입니다.
로우넘 그 녀석은 로우마다 1,2,3,..순으로 번호를 부여하는 넘이구요.
자, 말이 필요없습니다. 바로 예문 들어갑니다.
SQL> select * from emp where rownum < 3;
결과는 아래와 같습니다.
EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | OMN | DEPTNO |
7369 | SMITH | CLERK | 7902 | 17-DEC-80 | 800 |
| 20 |
7499 | ALLEN | SALESMAN | 7698 | 20-FEB-81 | 600 | 300 | 30 |
2 rows selected
순서는 어떻게 되는지 모르겠지만, 어쨌든 rownum < 3 에 의해 2개의 로우(row)가
추출되었습니다.
rownum의 번호는 테이블에 로우가 입력된 순서대로 부여됩니다.
어디 그런지 한 번 볼까요?
이번에는 order by문을 함께 이용하여, rownum을 추출해 보겠습니다.
SQL> select employee_Id,last_name,rownum
2> from employee
3> where rownum < 5
4> order by last_name;
결과는 다음과 같습니다.
EMPLOYEE_ID | LAST_NAME | ROWNUM |
7499 | ALLEN | 2 |
7506 | DENNIS | 4 |
7505 | DOYLE | 3 |
7369 | SMITH | 1 |
4 rows selected
last_name의 알파벳 순서대로 출력이 되었습니다. rownum은 2,4,3,1로 되어있네요.
아마도 SMITH가 젤 먼저 입력되고 DENNIS가 젤 나중에 입력되었나 봅니다.
이제 rownum에 대해 대충 짐작이 가시겠죠?
'앗, 그렇다면 게시판을 만들 때 rownum을 이용해서 번호를 부여하면 되겠네?'
라고 말씀하시겠죠. 하지만 세상 일이 어디 생각처럼 쉽게 되나요?
rownum에도 한계가 있었으니, 그것은....두둥~
rownum에서 아래 형식은 사용할 수 없다는 것이지요.
ROWNUM > n, ROWNUM = n
예를 볼까요?
SQL> select employee_id,rownum
2> from employee
3> where rownum > 3;
결과는
employee_id | rownum |
|
|
0 rows selected
아무 로우도 추출되지 않았습니다. where rownum = 3 이라고 쓰셔도 마찬가지 겠지요.
'아니 그렇다면 로우넘으로는 원하는 번호를 추출할 수 없단말이야? 로우넘..그 넘 참..'
그러나 방법이 없는 것은 아닙니다. 넘 로우넘 욕하지 마시길...
방법이라 함은 뷰(view)를 이용하는 것입니다.
참, 그러고보니 뷰에 대해서 설명을 안했었네요. 뷰는 일종의 가상의 테이블인데요,
일단 거기까지만 아시고, 뷰에 대한 강좌는 곧 올리도록 하겠습니다.
그럼 이제 원하는 번호를 추출해 보겠습니다.
SQL> select * from (select employee_id, rownum numb from employee)
2> where 2<= numb and numb <=3;
결과는 아래와 같습니다.
employee_id | numb |
7499 | 2 |
7505 | 3 |
2 rows selected
뷰를 생성하면서 아예 rownum을 컬럼화 하는 것입니다.
rownum numb
이 부분이 rownum을 numb라는 별칭(alias)으로 일반 컬럼화 한 것입니다.
슈도 컬럼이 아닌 일반 컬럼으로 말이지요.