日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

討論oracle在rowid和rownum

系統(tǒng) 2086 0

[ 概要 ]

剛剛接觸oracle的同學(xué)可能經(jīng)常會被rowid和rownum這兩個(gè)詞弄混, 弄清楚這兩個(gè)家伙對于我們寫sql會有非常大的幫助, 以下偶就拋磚引玉, 簡單地談?wù)勊麄冎g的差別吧.


[ 比較 ]

rowid和rownum都是oracle中的偽列, 但他們還是存在本質(zhì)差別:

rowid: 是物理地址, 用于定位數(shù)據(jù)表中數(shù)據(jù)的位置, 它是唯一的且不會改變.

rownum: 是依據(jù)查詢的結(jié)果集給每行分配的一個(gè)邏輯編號, 查詢結(jié)果不同, rownum自然不同.?


對于同一條記錄, 查詢條件不同, rownum會不同, 可是rowid將不變.

演示樣例: 查詢公司全部的員工

select rowid, rownum, empno, ename from emp;

討論oracle在rowid和rownum


演示樣例: 查詢公司員工姓名包括'S'

select rowid, rownum, empno, ename from emp where ename like '%S%';

討論oracle在rowid和rownum


細(xì)心的同學(xué)不難發(fā)現(xiàn), 對于一行記錄, rowid沒變, rownum變了. 比如: 姓名為'SMITH'的員工.


[ 陷阱 ]

1. rownum僅僅支持符 <、<=、!=, 不支持 >, >=, =, between...and

      select * from emp where rownum > 10 -- 沒有結(jié)果
    
      select *
  from (select rownum row_num, e.* from emp e) emp_temp
 where emp_temp.row_num > 10; -- 能夠獲取十位以后記錄
    

解釋一下: 由于rownum是對結(jié)果集加的一個(gè)偽列, 即先查到結(jié)果集之后再加上去的一個(gè)列(強(qiáng)調(diào): 要有結(jié)果集). 簡單地說rownum是符合條件結(jié)果的序列號, 它總是從1開始排位, 所以你選出的結(jié)果不可能沒有1, 而有大于1的值.


有了上面的知識, 我們就不難解釋下面現(xiàn)象:

① 為什么select * from emp where rownum != 10 總是返回前9條記錄?

由于查詢到結(jié)果集后, 顯示完第9條記錄, 之后的記錄都是 != 10.

② 為什么rownum > 1 查不到一條記錄, 而rownum > 0 或 rownum >= 1 卻總顯示全部記錄?

由于rownum是在查詢到結(jié)果集之后加上去的, 它總是從1開始.

③ 為什么between 1 and 10 或者 between 0 and 10 能查到結(jié)果, 而between 2 and 10卻得不到結(jié)果?

原因同上, 少了rownum=1就像空中樓閣一樣不能存在.


[ 應(yīng)用 ]

廢話扯了一籮筐, 這兩哥們究竟有啥用呢?

嘿嘿, 別急, 以下就上正菜...

問題: 獲取薪水排名前三的員工

分析: 假設(shè)是sql server就好了, 我們能夠使用topkeyword, oracle中我們用rownum也能解決

       select *
   from (select * from emp order by sal desc)
  where rownum <= 3
  order by rownum asc
    


討論oracle在rowid和rownum


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 攀枝花市| 贞丰县| 锦州市| 安义县| 新野县| 乐安县| 安塞县| 武宁县| 河池市| 越西县| 吴旗县| 黄骅市| 江西省| 镇赉县| 达孜县| 始兴县| 宁都县| 阳城县| 志丹县| 咸宁市| 石泉县| 永康市| 泾川县| 象山县| 郴州市| 堆龙德庆县| 肥西县| 吴江市| 上饶市| 长岛县| 勃利县| 北宁市| 乌苏市| 华坪县| 水富县| 漳州市| 霍林郭勒市| 临夏县| 开阳县| 泌阳县| 镇远县|