-- ORACLE 中的僞列
----- 僞列就像表中的列一樣,但是在表中並不存儲。僞列只能查詢。不能進行增刪改工作。
----- ROWNUM與ROWID不同,ROWID是插入記錄時生成,ROWNUM是查詢數據時生成。ROWID標識的是行的物理地址。ROWNUM標識的是查詢結果中的行的次序。
---- 1. rowid
------ 表中的每一行記錄都有一個物理地址。rowid 僞列就返回該行的物理地址
SELECT ROWID,dept_name from base_dept;
--- 2. rownum
----- rownum爲結果集中的每一行標識一個行號。使用rownum僞列可以限制查詢結果集中返回的行數。
SELECT ROWNUM,dept_name from base_dept;
---案例5:查詢出工資最高的前5名員工的姓名、工資和工資。
---- 案例分析
---- “工資最高的前5名”需要先降序排序,再取前5名,但是生成ROWNUM操作比排序要早,排序時已經連同ROWNUM一起排序了,
----- 因此不能直接在案例1的語句中直接加上Order by就行,而是需要對排序的結果重新做二次查詢,產生新的ROWNUM才能作爲查詢的條件依據。
SELECT ROWNUM,T.* FROM (SELECT ENAME,JOB,SAL FROM EMP ORDER BY SAL DESC) T WHERE ROWNUM<=5
--- rownum 分頁
SELECT * FROM (SELECT ROWNUM R,ENAME,JOB,SAL FROM EMP WHERE ROWNUM<=10) WHERE R>5;