不同資料庫限制取前N條記錄

愛吃串串的瘦子發表於2018-07-26

1.mysql  

SELECT *

 FROM TABLENAME

 LIMIT N  

2.sql server

SELECT TOP N * 

FROM TABLENAME  

3.orale

(1)rownum(oracle從8開始提供的一個偽列,是把SQL出來的結果進行編號,始終從1開始常見的用途就是用來分頁輸出

  oracle 取前10條記錄

 1) select *

   from tbname

  where rownum < 11;

 2) select *

    from (select * from tbname order by id desc )

   where rownum<=10;

3)這條語句即是輸出第10到第20條紀錄,這裡之所以用rownum rn,是把rownum轉成例項,因為rownum本身只能用<=的比較方式,只有轉成實列,這樣就可做 >=的比較了。

  SELECT *
  FROM (SELECT a.*, ROWNUM rn
  FROM torderdetail a)
  WHERE rn >= 10 AND rn <= 20

 4)特別的

Rownum的另類用法,有時候我們會遇到這種需求,要求輸出當月的所有天數,許多人會煩惱,資料庫裡又沒有這樣的表,怎麼輸出一個月的所有天數呢?用rownum就能解決:
SELECT TRUNC (SYSDATE, 'MM') + ROWNUM - 1
  FROM DUAL
CONNECT BY ROWNUM <= TO_NUMBER (TO_CHAR (LAST_DAY (SYSDATE), 'dd'))

(2)row_number() over()的使用(一般寫法row_number() over( order by order_date desc) 生成的順序和rownum的語句一樣,效率也一樣

而對於分組後取最近的10條紀錄,則是rownum無法實現的,這時只有row_number可以實現,row_number() over(partition by 分組欄位 order by 排序欄位)就能實現分組後編號,比如說要取近一個月的每天最後10個訂單紀錄
SELECT *
FROM (SELECT a.*,ROW_NUMBER ()

OVER (PARTITION BY TRUNC (order_date)

ORDER BY order_date DESC) rn
FROM torderdetail a)
WHERE rn <= 10

相關文章