最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Sql奇技淫巧之ROWNUM偽列的使用

 更新時(shí)間:2023年08月15日 08:14:32   作者:Echoo華地  
本文主要介紹了Sql奇技淫巧之ROWNUM偽列,ROWNUM是一個(gè)偽列,它是根據(jù)每次查詢的結(jié)果動(dòng)態(tài)生成的一列遞增編號,下面就一起來介紹一下如何使用把

ROWNUM偽列

ROWNUM是一個(gè)偽列,它是根據(jù)每次查詢的結(jié)果動(dòng)態(tài)生成的一列遞增編號,表示 Oracle 從表中選擇該行的順序,選擇的第一行ROWNUM為1,第二行ROWNUM為2,以此類推。

注意1:

ROWNUM偽列是在WHERE子句之前生成的,就是說它并不是在執(zhí)行了WHERE子句過濾之后再對數(shù)據(jù)編號
比如在執(zhí)行WHERE子句,結(jié)果數(shù)據(jù)是這樣的:

idnameageROWNUM
0001mary181
0002mike202
0003john193
0004kitty164
0005susy185
0006echoo216

這時(shí)候的ROWNUM是一列遞增排列的、完整的編號
然后如果執(zhí)行一個(gè)WHERE子句:WHERE age >18那數(shù)據(jù)就變成了:

idnameageROWNUM
0002mike202
0003john193
0004kitty216

ROWNUM出現(xiàn)了斷層,不連續(xù)了
如果后面再執(zhí)行一個(gè)ORDER BY age DESC就變成這樣了:

idnameageROWNUM
0004kitty216
0002mike202
0003john193

ROWNUM不按順序排了
所以在利用ROWNUM偽列來對結(jié)果集做限制、過濾、排序、分頁等操作的時(shí)候一定要注意這個(gè)點(diǎn),不然很容易錯(cuò)亂;

注意2:

ROWNUM是一行一行賦值的,只有上一行數(shù)據(jù)被選擇成功,下一行才會(huì)遞增!而且 select 語句也是一行一行選擇的,每 select 一行數(shù)據(jù)就要進(jìn)行 where 條件判斷。
比如有這樣一個(gè)employees表:

idnameage
0001mary18
0002mike20
0003john19
0004kitty16
0005susy18
0006echoo21

對這個(gè)表執(zhí)行這樣一個(gè)SQL:

SELECT * FROM employees WHERE ROWNUM > 1;

這句SQL的預(yù)期為取出除第一條數(shù)據(jù)外的所有數(shù)據(jù),但是執(zhí)行的結(jié)果是一條都選不出來,來看執(zhí)行過程:

① select 出的第一條數(shù)據(jù)為

idnameage
0001mary18

② ROWNUM 給這條數(shù)據(jù)賦值,因?yàn)槭堑谝粭l數(shù)據(jù),所以從 1 開始,賦值完是這樣的:

idnameageROWNUM
0001mary181

③ 進(jìn)行 WHERE ROWNUM > 1 條件判斷,1>1不滿足條件,所以第一條數(shù)據(jù)被過濾掉
④ select 第二條數(shù)據(jù)

idnameage
0002mike20

⑤ ROWNUM 給這條數(shù)據(jù)賦值,因?yàn)樯弦粭l數(shù)據(jù)被過濾掉了,所以還是從 1 開始,賦值完是這樣的:

idnameageROWNUM
0002mike201

⑥ 進(jìn)行 WHERE ROWNUM > 1 條件判斷,1>1不滿足條件,所以這數(shù)據(jù)也被過濾掉
⑦ ·············
一直如此循環(huán)直到結(jié)束,都沒有符合條件的數(shù)據(jù),所以一條數(shù)據(jù)都選不出來!

例1:取前10條數(shù)據(jù)

ROWNUM來限制查詢返回的行數(shù),如下例所示:

SELECT * FROM employees WHERE ROWNUM < 11;

WHERE ROWNUM < 11表示返回查詢數(shù)據(jù)的前10條;

例2:取排序后的前10條數(shù)據(jù)

不能夠像下面這樣直接在WHERE子句后簡單的加上ORDER BY子句了

SELECT * FROM employees WHERE ROWNUM < 11 ORDER BY age;

因?yàn)檫@里的意思是先執(zhí)行WHERE子句選出ROWNUM1~10的數(shù)據(jù),然后再進(jìn)行排列,和我們預(yù)想不符。我們要的是按年齡排序后的前10條數(shù)據(jù)。
所以應(yīng)該這樣寫:

SELECT *
  FROM (SELECT * FROM employees ORDER BY employee_id)
  WHERE ROWNUM < 11;

這里的意思就是先執(zhí)行排序,然后對排完序的結(jié)果集用ROWNUM偽列按順序編號,然后取其中ROWNUM為1~10的那10條數(shù)據(jù);

例3:分頁

SELECT * 
FROM( SELECT temp_table.*,ROWNUM AS rn
  	  FROM (SELECT * FROM employees ORDER BY employee_id) temp_table
  	 ) result_table
WHERE result_table.rn BETWEEN 起始行數(shù) AND 結(jié)尾行數(shù)

通過嵌套查詢的方式,把動(dòng)態(tài)的ROWNUM偽列變成固定的列rn,然后再用rn列進(jìn)行分頁;

到此這篇關(guān)于Sql奇技淫巧之ROWNUM偽列的文章就介紹到這了,更多相關(guān)Sql奇技淫巧之ROWNUM偽列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Sql Server中的事務(wù)介紹

    Sql Server中的事務(wù)介紹

    這篇文章主要介紹了Sql Server中的事務(wù)介紹,本文講解了什么是事務(wù)、事務(wù)的分類、事務(wù)的語句、事務(wù)的4個(gè)特性、事務(wù)實(shí)例等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • MS SQL Server STUFF實(shí)現(xiàn)統(tǒng)計(jì)記錄行轉(zhuǎn)為列顯示

    MS SQL Server STUFF實(shí)現(xiàn)統(tǒng)計(jì)記錄行轉(zhuǎn)為列顯示

    SQL語句行轉(zhuǎn)列函數(shù)是一種用于將多個(gè)行數(shù)據(jù)轉(zhuǎn)換為一列的函數(shù),本文主要介紹了MS SQL Server STUFF實(shí)現(xiàn)統(tǒng)計(jì)記錄行轉(zhuǎn)為列顯示,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • sql server使用公用表表達(dá)式CTE通過遞歸方式編寫通用函數(shù)自動(dòng)生成連續(xù)數(shù)字和日期

    sql server使用公用表表達(dá)式CTE通過遞歸方式編寫通用函數(shù)自動(dòng)生成連續(xù)數(shù)字和日期

    CTE是在內(nèi)存中準(zhǔn)備好數(shù)據(jù),而不是每次一條往返服務(wù)器和客戶端一次。如果需要再插入到臨時(shí)表的話就是全部數(shù)據(jù)一次性插入。 這篇文章主要介紹了sql server使用公用表表達(dá)式CTE通過遞歸方式編寫通用函數(shù)自動(dòng)生成連續(xù)數(shù)字和日期 ,需要的朋友可以參考下
    2019-07-07
  • Sql中存儲過程的定義、修改和刪除操作

    Sql中存儲過程的定義、修改和刪除操作

    這篇文章主要介紹了Sql中存儲過程的定義、修改和刪除的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • SQLSERVER 臨時(shí)表和表變量的區(qū)別匯總

    SQLSERVER 臨時(shí)表和表變量的區(qū)別匯總

    不管臨時(shí)表還是表變量都帶了表這個(gè)詞,既然提到表 ,按推理自然會(huì)落到某數(shù)據(jù)庫中,如果真在一個(gè)數(shù)據(jù)庫中,那自然就有它的存儲文件 .mdf和.ldf,那是不是如我推理的那樣呢,這篇文章主要介紹了SQLSERVER 臨時(shí)表和表變量到底有什么區(qū)別,需要的朋友可以參考下
    2023-02-02
  • sql server中隨機(jī)函數(shù)NewID()和Rand()

    sql server中隨機(jī)函數(shù)NewID()和Rand()

    在SQL語言中,隨機(jī)函數(shù)NEWID和rand()用法并不相同,下面就將為您示例分析這兩個(gè)隨機(jī)函數(shù)的區(qū)別,供您參考,希望對您深入理解SQL函數(shù)能起到作用
    2015-10-10
  • SQL?SERVER數(shù)據(jù)庫中日期格式化詳解

    SQL?SERVER數(shù)據(jù)庫中日期格式化詳解

    這篇文章主要給大家介紹了關(guān)于SQL?SERVER數(shù)據(jù)庫中日期格式化的相關(guān)資料,在SQL?Server中可以使用CONVERT函數(shù)來格式化日期,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • sql server服務(wù)無法啟動(dòng)的解決方案

    sql server服務(wù)無法啟動(dòng)的解決方案

    sql server軟件是一款關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有使用方便可伸縮性好與相關(guān)軟件集成程度高等優(yōu)點(diǎn),我們在數(shù)據(jù)編程操作時(shí)經(jīng)常會(huì)使用這款編程軟件,在編程時(shí)系統(tǒng)有時(shí)會(huì)提示sql server服務(wù)無法啟動(dòng),那么大家該如何正常啟動(dòng)呢,下面就由小編來給大家介紹一下如何解決
    2023-11-11
  • sql語句優(yōu)化之SQL Server(詳細(xì)整理)

    sql語句優(yōu)化之SQL Server(詳細(xì)整理)

    這篇文章主要介紹了sql語句優(yōu)化之SQL Server篇,整理的比較詳細(xì),推薦收藏
    2014-07-07
  • Sql Server 壓縮數(shù)據(jù)庫日志文件的方法

    Sql Server 壓縮數(shù)據(jù)庫日志文件的方法

    Sql Server 日志 _log.ldf文件太大,數(shù)據(jù)庫文件有500g,日志文件也達(dá)到了500g,占用磁盤空間過大,且可能影響程序性能,需要壓縮日志文件,下面小編給大家講解下Sql Server 壓縮數(shù)據(jù)庫日志文件的方法,感興趣的朋友一起看看吧
    2022-11-11

最新評論

武冈市| 乌鲁木齐县| 玉山县| 寿宁县| 谢通门县| 宁远县| 孝感市| 南川市| 延寿县| 湘潭县| 古田县| 蓝田县| 那曲县| 都江堰市| 元阳县| 旺苍县| 桦甸市| 荔波县| 丰都县| 常宁市| 中卫市| 渭南市| 大田县| 固阳县| 孟津县| 东城区| 十堰市| 平江县| 广东省| 峨眉山市| 黑龙江省| 新郑市| 四川省| 洪湖市| 余江县| 镇雄县| 濮阳县| 泸溪县| 泰宁县| 民县| 莆田市|