分頁查詢(rownum關鍵字)
Oracle在查詢數據的時候對每一條記錄進行編號並且命名爲rownum,我們可以對rownum進行篩選,選擇我們需要的部位,就達到了分頁查詢的效果。
更高效查詢:
--效率更高
SELECT * FROM(
SELECT emp.*,ROWNUM rowno FROM emp
WHERE ROWNUM<結束索引位置
) E WHERE E.rowno >=開始索引位置;
上面的SQL語句執行效率更高,因爲在第一步,查詢所有結果並且編號時,Oracle在編號的行號等於結束索引位置之後,就會停止讀取數據,不再編號。
如果使用第一種方法編號,會讀取所有的記錄,
而第二種方法編號,只會讀取結束索引位置的記錄數。
注意:兩個篩選條件不能交換位置,因爲Oracle是先讀取再編號,所以如果交換位置,Oracle每次讀取數據都會比較是否滿足條件,因爲不滿足條件,所以讀取的數據會被捨棄掉,並且編號也會繼續從1開始,這樣就會導致永遠無法讀取到任何數據。
比如:
SELECT emp.*,ROWNUM rowno FROM emp
WHERE ROWNUM<10
Oracle讀取表中第一條數據,然後編號,因爲是第一條數據,所以編號爲1,1不滿足<10的條件,捨棄。
Oracle讀取表中第二條數據,然後編號,因爲之前沒有數據被保留,所以編號依舊爲1,1不滿足<10的條件,捨棄。
……
因此,即使讀取到最後一條記錄,rownum還是1,不會被讀取。