SQL 語法 執行 順序

先 說 結論, SQL 語法 有 執行 順序, 有時候 我們 看起來 沒 問題 的 SQL, 在 編譯 的 時候 可能 會 產生 不 一樣 的 結果, 請 參考 下列 網址

http://msdn.microsoft.com/zh-tw/ library / ms189499.aspx

我 下面 舉 的 是 ORACLE 8i 的 例子 (也許 新版 沒 這 問題),
跟 最近 遇到 的 情況 有點 類似, 參考.

我們 想 對 某個 tabela 抓 出 前 3 筆 資料

在 MS-SQL 的 語法 是

SELECT TOP 3 * FROM [TABLE]

在 ORACLE 的 語法.

SELECT * FROM [TABLE] WHERE ROWNUM between 1 and 3

如果 我們 想 對 某個 tabela 先 排序 之後 再 抓 出 前 3 筆 資料

在 MS-SQL 的 語法 是

SELECT TOP 3 * FROM [TABLE] ORDER BY [FIELD]

在 ORACLE 的 語法 是

SELECT ** FROM [TABLE] WHERE ROWNUM between 1 and 3 ORDER BY [FIELD]

(這 結果 不是 想要 的 的)    

但是 , 上述 兩個 語法 的 執行 結果 其實 不 一樣

MS-SQL 是 先 排序, 再 抓 前 3 筆

ORACLE 是 先 抓 前 3 筆, 再.

所以 ORACLE 想 做到 和 SQL 相同 效果, 要用 巢 狀 SQL

SELECT ** FROM ( SELECT * FROM [TABLE] ORDER BY [FIELD] ) A WHERE ROWNUM between 1 and 3