原本認為這樣可以抓到我們要的前5筆資料
但排序卻是錯亂的
select *
from emp
where ROWNUM <= 5
order by sal desc;
以語法來看是~抓出前5筆資料
而且是先依照我們要的以sal由大到小排列
但實際上Oracle卻不是這麼做
以案例來說~
Oracle卻是先將emp資料庫裡先標記序號
再取出前5筆後
最後依order by 排序
所以咧~就發生慘案啦
原本我們要的做的query是
用 2個select
將查詢後的資料以50筆為單位
分次query出來
但資料排序會錯亂
最後依照Oracle官方文件改成以 3個select
Oracle官方說明文件 On ROWNUM and Limiting Results
以下為Oracle語法處理的順序
Think of it as being processed in this order:
1. The FROM/WHERE clause goes first.
2. ROWNUM is assigned and incremented to each output row from the FROM/WHERE clause.
3. SELECT is applied.
4. GROUP BY is applied.
5. HAVING is applied.
6. ORDER BY is applied.
沒有留言:
張貼留言