日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Oracle查詢前10條記錄的操作方案

如果你想了解Oracle查詢前10條記錄的相關(guān)實(shí)際應(yīng)用方案的話,你就可以點(diǎn)擊以下的文章對(duì)其在實(shí)際相關(guān)操作中的正確用法,有一個(gè)更加完善的認(rèn)識(shí),希望你在瀏覽完以下的文章會(huì)以下就是正文的詳細(xì)內(nèi)容的介紹。

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)麻山免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

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

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

下面是關(guān)于rownum的介紹

Rownum和row_number() over()的使用

ROWNUM是Oracle從8開始提供的一個(gè)偽列,是把SQL出來的結(jié)果進(jìn)行編號(hào),始終從1開始,常見的用途就是用來分頁(yè)輸出.

比如

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

這條語(yǔ)句就是輸出前10條紀(jì)錄,在這里用途上類似于sql sever的top,不過rownum對(duì)于指定編號(hào)區(qū)間的輸出應(yīng)該說更強(qiáng)大

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

這條語(yǔ)句即是輸出Oracle查詢第10到第20條紀(jì)錄,這里之所以用rownum rn,是把rownum轉(zhuǎn)成實(shí)例,因?yàn)閞ownum本身只能用 <=的比較方式,只有轉(zhuǎn)成實(shí)列,這樣就可做 >=的比較了。

在實(shí)際用途中,常常會(huì)要求取最近的幾條紀(jì)錄,這就需要先對(duì)紀(jì)錄進(jìn)行排序后再取rownum <=

一般常見的

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

而在CSDN曾經(jīng)發(fā)生過討論,關(guān)于取近的10條紀(jì)錄,有人給出這樣的語(yǔ)句

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

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

那為什么會(huì)有爭(zhēng)議呢,那就在于在執(zhí)行順序上爭(zhēng)議,是先執(zhí)行排序取10條紀(jì)錄,還是取10條紀(jì)錄,再排序呢??jī)煞N順序取出來的結(jié)果是截然相反的,Oracle查詢前10條記錄時(shí)先排序再取10條,就是取最近的10條,而先取10條,再排序,則取出的最早的10條紀(jì)錄。對(duì)于此語(yǔ)句,普遍的認(rèn)為執(zhí)行順序是先取10條紀(jì)錄再排序的。

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

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

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

而對(duì)于分組后取最近的10條紀(jì)錄,則是rownum無(wú)法實(shí)現(xiàn)的,這時(shí)只有row_number可以實(shí)現(xiàn),row_number() over(partition by 分組字段 order by 排序字段)就能實(shí)現(xiàn)分組后編號(hào),比如說要取近一個(gè)月的每天最后10個(gè)訂單紀(jì)錄

 
 
 
  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的另類用法,有時(shí)候我們會(huì)遇到這種需求,要求輸出當(dāng)月的所有天數(shù),許多人會(huì)煩惱,數(shù)據(jù)庫(kù)里又沒有這樣的表,怎么輸出一個(gè)月的所有天數(shù)呢?用rownum就能解決:

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

以上的相關(guān)內(nèi)容就是對(duì)Oracle查詢前10條記錄的介紹,望你能有所收獲。

【編輯推薦】

  1. Oracle數(shù)據(jù)庫(kù)中的兩個(gè)進(jìn)程
  2. Oracle SMON進(jìn)程中系統(tǒng)監(jiān)視進(jìn)程SMON
  3. Oracle數(shù)據(jù)字典中包含的視圖有哪些
  4. Oracle數(shù)據(jù)字典的用途介紹
  5. Oracle數(shù)據(jù)庫(kù)中常用的用戶

當(dāng)前名稱:Oracle查詢前10條記錄的操作方案
標(biāo)題鏈接:http://www.dlmjj.cn/article/ccecggi.html