SQL語法執行順序
先說結論,SQL語法有執行順序,有時候我們看起來沒問題的SQL,在編譯的時候可能會產生不一樣的結果,請參考下列網址
http://msdn.microsoft.com/zh-tw/library/ms189499.aspx
我下面舉的是ORACLE 8i的例子 (也許新版沒這問題),
跟最近遇到的情況有點類似,參考一下
如果我們想對某個table抓出前3筆資料
在MS-SQL的語法是
SELECT TOP 3 * FROM [TABLE]
在ORACLE的語法是
SELECT * FROM [TABLE] WHERE ROWNUM between 1 and 3
如果我們想對某個table先排序之後再抓出前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
Written by Vito Chung
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Sql
Authors
Related Tags
#sql
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#