切換
舊版
前往
大廳
主題

SQL語法-取前幾筆資料

皓月當空 | 2012-06-26 14:55:14 | 巴幣 4 | 人氣 10741

之前在寫程式遇到的問題
因為DB2的使用率相對的低
一些與其它資料庫相異的寫法也不好找
本人又極懶得看原文 XD

總之在MS SQL很常用的top n取前n筆資料的語法
在DB2跟MySQL是不適用的
DB2必須在句尾加上"Fetch First n Row Only"
MySQL則用Limit n的語法
範例如下

DB2:

Select * From Table1 Order By Column1 Fetch First 10 Row Only  //查詢前10筆

MS SQL Server:

Select Top 10 * From Table1 Order By Column1  //查詢前10筆
Select * from Table1 where Column1 between 值1 and 值2  //查詢特定欄位介於值1與值2間的資料

MySQL:

Select * From Table1 Limit 10  //查詢前10筆
Select * From Table Limit 10,5  //查詢第11~15筆(第10筆後取5筆)
Select * From Table Limit 10,-1  //查詢自第11筆至最後一筆

之後也沒什麼機會碰到了吧! XD

創作回應

火山夏威夷
嗯~~雖然這篇文章已經過了一段時間了
不過我這邊提出一些疑問

MySQL中
Select * From Table Limit 10,-1  //查詢自第11筆至最後一筆

關於那個-1的用法...確定是正確的嗎?


因為我在各處尋找LIMIT的相關用法
而在MySQL 5.1 Reference Manual中的LIMIT解釋
也沒有相關用法

他是有提到,若想要抓到底,可以用一個極大的數字在後面
(To retrieve all rows from a certain offset up to the end of the result set, you can use some large number for the second parameter)

嗯...小弟我並沒有打算開筆戰的意思
不過是希望交流一下...確認問題在哪裡而已
(我個人使用limit 10,-1的方式被判定syntax error就是)
感謝~
2012-09-18 00:52:24
皓月當空
我的確零散的在一些網路文章上看到這個用法
不過並不多見
目前手邊沒有可用的MySQL可以試驗
也沒有親自操作試過這個用法

若假設這個用法是可行的
我猜想可能的錯誤原因
1.或許是MySQL版本的問題
2.執行介面造成的差異(直接用MySQL的文字命令執行或用其他語法餵命令字串給MySQL去跑的差異)
3.子查詢中不能用limit(這個我有看到相關的文章,不過還是有可以在子查詢中用limit的方法,我就沒有深入研究了)

若是筆誤
應不容易會有人筆誤出相同的狀況
又煞有其事認真的寫文章
所以我會認為可能是以上的原因(或是其他不明的靈異現象)造成錯誤
當然也不排除這個用法不可行的可能性
有時網路的上的文章以訛傳訛也會產生許多謠言
若真的錯誤無法排除的話
另尋其他解決的方法
在資訊的領域通常比追根究柢會來得省時省事 XD
2012-09-19 00:38:05
火山夏威夷
嘛~~~
我也跑去查了一下5.1~4.0的文件,也是沒看到相關作法就是
(可能是更以前的版本吧)

總之~~測試了一下limit第二個值給特大的情形
(根據手冊上寫的18446744073709551615)
在MySQL的特性底下,是不會浪費多餘額外的時間的
(所以limit 10,10000000 和 limit 10,1000 在你未滿1010比資料的情況...所須時間差不多)

感謝交流分享啦~
我會留言也是希望讓以後查詢到這篇文章的人有所幫助~~
(我也是為了查詢到最後一筆才看到這篇文章的~)
2012-09-19 14:27:31
皓月當空
非常感謝你的用心以及提供資訊^^
2012-09-21 00:43:13

更多創作