成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle查詢前10條記錄的操作方案

數據庫 Oracle
本文主要是通過介紹Oracle查詢前10條記錄的相關實際應用代碼來引出Oracle查詢前10條記錄的實際操作,以下就是文章的詳細介紹。

如果你想了解Oracle查詢前10條記錄的相關實際應用方案的話,你就可以點擊以下的文章對其在實際相關操作中的正確用法,有一個更加完善的認識,希望你在瀏覽完以下的文章會以下就是正文的詳細內容的介紹。

在Oracle怎樣查詢表中的top10條記錄呢?

 

  1. select *  
  2. from test  
  3. where rownum <=10  

 

下面是關于rownum的介紹

Rownum和row_number() over()的使用

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

比如

 

  1. SELECT *  
  2. FROM torderdetail a  
  3. WHERE ROWNUM <= 10  

 

這條語句就是輸出前10條紀錄,在這里用途上類似于sql sever的top,不過rownum對于指定編號區間的輸出應該說更強大

 

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

 

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

在實際用途中,常常會要求取最近的幾條紀錄,這就需要先對紀錄進行排序后再取rownum <=

一般常見的

 

  1. SELECT *  
  2. FROM (SELECT a.*  
  3. FROM torderdetail a  
  4. ORDER BY order_date DESC)  
  5. WHERE ROWNUM <= 10  

 

而在CSDN曾經發生過討論,關于取近的10條紀錄,有人給出這樣的語句

 

  1. SELECT a.*  
  2. FROM torderdetail a  
  3. WHERE ROWNUM <= 10  
  4. ORDER BY order_date DESC  

 

之所以會出現這樣的語句,主要是從效率上的考慮,前面條語句,是要進行全表掃描后再排序,然后再取10條紀錄,后一條語句則不會全表掃描,只會取出10條紀錄,很明顯后條語句的效率會高許多。

那為什么會有爭議呢,那就在于在執行順序上爭議,是先執行排序取10條紀錄,還是取10條紀錄,再排序呢?兩種順序取出來的結果是截然相反的,Oracle查詢前10條記錄時先排序再取10條,就是取最近的10條,而先取10條,再排序,則取出的最早的10條紀錄。對于此語句,普遍的認為執行順序是先取10條紀錄再排序的。

所以此語句應該是錯誤。但實際上并非如此,此語句的執行順序和order by的字段有關系,如果你order by 的字段是pk,則是先排序,再取10條(速度比第一種語句快),而排序字段不是PK 時,是先取10條再排序,此時結果就與要求不一樣了,所以第二種寫法一定要在排序字段是主鍵的情況下才能保證結果正確。

Row_number() over()這個分析函數是從9I開始提供的,一般的用途和rownum差不多。

一般寫法row_number() over( order by order_date desc) 生成的順序和rownum的語句一樣,效率也一樣(對于同樣有order by 的rownum語句來說),所以在這種情況下兩種用法是一樣的。

而對于分組后取最近的10條紀錄,則是rownum無法實現的,這時只有row_number可以實現,row_number() over(partition by 分組字段 order by 排序字段)就能實現分組后編號,比如說要取近一個月的每天最后10個訂單紀錄

 

  1. SELECT *  
  2. FROM (SELECT a.*,  
  3. ROW_NUMBER () OVER (PARTITION BY TRUNC (order_date) ORDER BY order_date DESC)  
  4. rn  
  5. FROM torderdetail a)  
  6. WHERE rn <= 10  

 

Rownum的另類用法,有時候我們會遇到這種需求,要求輸出當月的所有天數,許多人會煩惱,數據庫里又沒有這樣的表,怎么輸出一個月的所有天數呢?用rownum就能解決:

 

  1. SELECT TRUNC (SYSDATE, 'MM') + ROWNUM - 1  
  2. FROM DUAL  
  3. CONNECT BY ROWNUM <= TO_NUMBER 
    (TO_CHAR (LAST_DAY (SYSDATE), 'dd'))  

 

以上的相關內容就是對Oracle查詢前10條記錄的介紹,望你能有所收獲。

【編輯推薦】

  1. Oracle數據庫中的兩個進程
  2. Oracle SMON進程中系統監視進程SMON
  3. Oracle數據字典中包含的視圖有哪些
  4. Oracle數據字典的用途介紹
  5. Oracle數據庫中常用的用戶

 

責任編輯:佚名 來源: 互聯網
相關推薦

2010-04-20 14:50:04

Oracle數據庫

2010-09-26 15:15:11

SQL語句

2010-11-09 14:35:48

SQL Server查

2010-04-23 16:35:02

Oracle 查詢記錄

2010-11-15 13:47:13

oracle記錄加鎖

2010-10-13 16:59:28

mysql查詢

2010-04-26 17:24:37

Oracle查詢表名Oracle表列名

2010-05-06 14:31:32

Oracle數據庫

2010-05-07 11:00:25

Oracle多表查詢

2010-08-02 14:56:05

DB2基本操作指令

2010-04-26 14:43:17

Oracle遞歸條件查

2010-04-12 14:44:06

Oracle Impd

2024-01-04 07:55:32

系統操作日志接口

2010-04-16 09:52:40

Oracle JOB

2009-04-08 10:20:43

Oracle插入查詢

2010-04-12 13:05:56

Oracle軟件

2010-04-30 10:24:00

Oracle查詢指定記

2010-05-06 14:11:55

Oracle多條件查詢

2010-11-15 14:42:03

Oracle查詢重復記

2010-04-13 13:33:37

Oracle字符集
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕av在线一二三区 | 亚洲视频在线免费 | 国产精品亚洲成在人线 | 91久久综合亚洲鲁鲁五月天 | 一区二区精品视频 | 日本aaa视频| 中文字幕一区二区三区四区五区 | 日韩国产高清在线观看 | 一级a爱片久久毛片 | 综合精品在线 | 99久久婷婷国产综合精品电影 | 久久久久久久久久久丰满 | www.伊人.com | 国产精品自产拍在线观看蜜 | 中文字幕乱码一区二区三区 | 麻豆国产一区二区三区四区 | 成人小视频在线观看 | 99福利视频 | 久久亚洲精品视频 | 色综合视频 | 一区二区三区四区在线视频 | 美女一级a毛片免费观看97 | 我要看免费一级毛片 | 激情五月综合网 | 久久精品亚洲欧美日韩久久 | 亚洲精品天堂 | 中文一区| 国产精品久久久久久久久免费丝袜 | 国产精品福利一区二区三区 | 欧美精品在线免费观看 | 日韩欧美国产一区二区 | 久久在看| 亚洲精品乱码久久久久久按摩观 | 成人h电影在线观看 | 青青草综合网 | 国产91av视频| 午夜久久av| 欧美日韩亚洲视频 | 成人av免费 | 国产成人福利在线观看 | 成人精品久久日伦片大全免费 |