oracle中 rownum與rowid的理

一、?Oracle分頁查詢

我們先看學習一下oracle分頁查詢的語法示例,然后在具體學習用rownum的原理。

/*從第1條開始,每次選N個,從第1+M個開始每次選N*/

/**/

?select?t2.*

???from?(select?rid

???????????from?(select?r.rid,?rownum?linenum

???????????????????from?(select?rowid?rid

???????????????????????????from?tablename?t?[條件限制]

??????????????????????????[order?by?rid?desc])?r

??????????????????WHERE?rownum?<=?5?[條件限制]

??????????????????[order?by?rid?desc])

??WHERE?linenum?>=?1)?t1,?tablename?t2

??where?t1.rid?=?t2.rowid

?/*排序,選出來5個,分頁顯示,下面兩為兩種方法*/

?select?t2.*

???from?(select?rid

???????????from?(select?r.rid,?rownum?linenum

???????????????????from?(select?rowid?rid,?t.*?from?tablename?t)?r

??????????????????WHERE?rownum?<=?10?[條件限制]

??????????????????[order?by?rowid?desc])

??????????WHERE?linenum?>=?6)?t1,

????????tablename?t2

??where?t1.rid?=?t2.rowid

?

???select?*

?????from?(select?t.*,?rownum?rn

?????????????from?tablename?t

????????????where?rownum?<=?10?[條件限制]

????????????[order?by?t.rowid?desc])

????where?rn?>=?6;

?

?select?*?from?tablename?where?rownum>1

?select?*?from?tablename?where?rownum>=1

?select?*?from?tablename?where?rownum>0

select???t2.*?
from?(select?rid
??????????from?(select?r.rid,?rownum?linenum
??????????????????from?(select????????????????????
?????????????????????????rowid?rid
??????????????????????????from?tablename?t
?????????????????????????[條件限制])?r
?????????????????WHERE?rownum?<=?50)
?????????WHERE?linenum?>=1)?t1,
??????tablename?t2
where?t1.rid?=?t2.rowid(利用rowid分頁,效率最高的一種,t2.*根據需要換成需要查詢的列)

select?count(element)?from?tablename

二、?oracle中?rownumrowid的理解

rownum,rowid都叫偽列。?但是,rownum是邏輯上的編號,且其值總是從1開始,每行的rounum不是固定的。而rowid是“物理”編號。若數據庫文件沒有移動,則每行的?rowid一般是固定不變的。

?

racle中rownum用法的總結

對于?Oracle?的?rownum?問題,很多資料都說不支持>,>=,=,between...and,只能用以上符號(<、<=、!=),并非說用>,>=,=,between..and?時會提示SQL語法錯誤,而是經常是查不出一條記錄來,還會出現似乎是莫名其妙的結果來,其實您只要理解好了這個?rownum?偽列的意義就不應該感到驚奇,同樣是偽列,rownum?與?rowid?可有些不一樣,下面以例子說明?

假設某個表?t1(c1)?有?20?條記錄

?

如果用?select?rownum,c1?from?t1?where?rownum?<?10,?只要是用小于號,查出來的結果很容易地與一般理解在概念上能達成一致,應該不會有任何疑問的。

?

可如果用?select?rownum,c1?from?t1?where?rownum?>?10?(如果寫下這樣的查詢語句,這時候在您的頭腦中應該是想得到表中后面10條記錄),你就會發現,顯示出來的結果要讓您失望了,也許您還會懷疑是不誰刪了一些記錄,然后查看記錄數,仍然是?20?條啊?那問題是出在哪呢?

?

先好好理解?rownum?的意義吧。因為ROWNUM是對結果集加的一個偽列,即先查到結果集之后再加上去的一個列?(強調:先要有結果集)。簡單的說?rownum?是對符合條件結果的序列號。它總是從1開始排起的。所以你選出的結果不可能沒有1,而有其他大于1的值。所以您沒辦法期望得到下面的結果集:

?

11?aaaaaaaa

12?bbbbbbb

13?ccccccc

.................

?

rownum?>10?沒有記錄,因為第一條不滿足去掉的話,第二條的ROWNUM又成了1,所以永遠沒有滿足條件的記錄。或者可以這樣理解:

?

ROWNUM是一個序列,是oracle數據庫從數據文件或緩沖區中讀取數據的順序。它取得第一條記錄則rownum值為1,第二條為2,依次類推。如果你用>,>=,=,between...and這些條件,因為從緩沖區或數據文件中得到的第一條記錄的rownum為1,則被刪除,接著取下條,可是它的rownum還是1,又被刪除,依次類推,便沒有了數據。

?

有了以上從不同方面建立起來的對?rownum?的概念,那我們可以來認識使用?rownum?的幾種現像

?

1.?select?rownum,c1?from?t1?where?rownum?!=?10?為何是返回前9條數據呢?它與?select?rownum,c1?from?tablename?where?rownum?<?10?返回的結果集是一樣的呢?

因為是在查詢到結果集后,顯示完第?9?條記錄后,之后的記錄也都是?!=?10,或者?>=10,所以只顯示前面9條記錄。也可以這樣理解,rownum?為9后的記錄的?rownum為10,因條件為?!=10,所以去掉,其后記錄補上,rownum又是10,也去掉,如果下去也就只會顯示前面9條記錄了

?

2.?為什么?rownum?>1?時查不到一條記錄,而?rownum?>0?或?rownum?>=1?卻總顯示所以的記錄

因為?rownum?是在查詢到的結果集后加上去的,它總是從1開始

?

3.?為什么?between?1?and?10?或者?between?0?and?10?能查到結果,而用?between?2?and?10?卻得不到結果

原因同上一樣,因為?rownum?總是從?1?開始

?

從上可以看出,任何時候想把?rownum?=?1?這條記錄拋棄是不對的,它在結果集中是不可或缺的,少了rownum=1?就像空中樓閣一般不能存在,所以你的?rownum?條件要包含到?1?

?

但如果就是想要用?rownum?>?10?這種條件的話話就要用嵌套語句,把?rownum?先生成,然后對他進行查詢。

select?*?

from?(selet?rownum?as?rn,t1.*?from?a?where?...)

where?rn?>10

?

一般代碼中對結果集進行分頁就是這么干的。

另外:rowid?與?rownum?雖都被稱為偽列,但它們的存在方式是不一樣的,rowid?可以說是物理存在的,表示記錄在表空間中的唯一位置ID,在DB中唯一。只要記錄沒被搬動過,rowid是不變的。rowid?相對于表來說又像表中的一般列,所以以?rowid?為條件就不會有?rownum那些情況發生。

另外還要注意:rownum不能以任何基表的名稱作為前綴。

?

轉載于:https://www.cnblogs.com/wuxi/archive/2012/10/24/2737947.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274551.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274551.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274551.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設計模式 日志系統設計_模式:我們設計系統的故事

設計模式 日志系統設計Design Patterns are some of the most over-used concepts in design today. And we all know what happens when you have some ideas all over the place. We start repeating them like parrots and applying them to everything, therefore distorti…

前端好還是后端好,看看7年前端和后端怎么說

大家好&#xff0c;我是若川。持續組織了近一年的源碼共讀活動&#xff0c;感興趣的可以 加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列。另外…

提升UI技能的5個步驟

element ui 步驟重點 (Top highlight)What to do when you know how to use the software and know the basics of designing interfaces? There are a few simple things that you can do to take your skills to the next level, and you don’t need to invest in expensiv…

空降進阿里的 P10 都是什么人

周末見了幾個朋友&#xff0c;吃飯時聊到他們前老板郭東白&#xff08;阿白&#xff09;&#xff0c;對了&#xff0c;我朋友在速賣通&#xff0c;他說阿白是 14 年來的阿里&#xff0c;直接就空降進了他們部門&#xff0c;當上首席架構師&#xff0c;后來又升到了 CTO&#xf…

linux下練習 c++ 關聯式容器multimap特性

/* multimap特性 key可以重復 不支持下標訪問 */ #include<iostream> #include<string> #include "print.h" #include<map> using namespace std; typedef pair<int,string> pairmp; typedef multimap<string,double> MS;int main() …

一致性設計,而不是一致性

一致性設計重點 (Top highlight)If we ask any design system advocate what are the main reasons to build and maintain a design system, chances are ‘Consistency’ will come up as first or second in their list, together with the ‘A single source of truth’ po…

如何在 React 應用中使用 Hooks、Redux 等管理狀態

大家好&#xff0c;我是若川。持續組織了近一年的源碼共讀活動&#xff0c;感興趣的可以 點此掃碼加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系…

長語音識別體驗_如何為語音體驗寫作

長語音識別體驗重點 (Top highlight)“Voice User Interface (VUI) Designer” is an increasingly prominent job title in the tech world. A VUI designer typically writes the conversation and designs the flow between a VUI — an invisible interface that communica…

表連接

初學SQL表連接的時候&#xff0c;什么笛卡爾積&#xff0c;左連接&#xff0c;右連接看的頭都大了 后來看了《SQL Server技術內幕2008&#xff1a;T-SQL查詢》之后&#xff0c;豁然開朗。今天寫數據庫又用到了表連接&#xff0c;印象有點模糊了&#xff0c;趕緊找地方寫下來先。…

分析了1011個程序員的裁員情況后得出的啟示

大家好&#xff0c;我是若川。持續組織了近一年的源碼共讀活動&#xff0c;感興趣的可以 點此掃碼加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系…

定義設計系統

System is “the whole creation, the universe,” from Late Latin systema “an arrangement, system,” from Greek systema “organized whole, a whole compounded of parts”.系統是晚期拉丁語系統的“整體創造物&#xff0c;宇宙”&#xff0c;是希臘語系統的“一種安排…

如何備份linux系統(轉)

如何備份linux系統 不像Windows&#xff0c;Linux不限制根用戶存取任何東西&#xff0c;因此&#xff0c;你完全可以把一個分區上每一個的文件放入一個TAR文件中。來實施這一方法&#xff0c;用這個成為根用戶&#xff1a;sudo su接著去你的文件系統的根目錄&#xff08;在我們…

2w行代碼、200個實戰項目,助你修煉5大編程基本功。【送書《設計模式之美》】...

大家好&#xff0c;我是若川。之前送了很多書&#xff0c;現在又和異步圖書合作再次爭取了幾本書&#xff0c;具體送書規則看文末。所謂練武不練功&#xff0c;到老一場空&#xff0c;以技術為驅動的程序員同樣如此。面向對象編程范式、設計原則、代碼規范、重構技巧和設計模式…

C++第10周項目2擴展之2參考——迭代求和

課程首頁地址&#xff1a;http://blog.csdn.net/sxhelijian/article/details/7910565【項目2擴展之2&#xff08;選做&#xff09;】計算下面的式子&#xff0c;不能使用求冪函數pow()式一&#xff1a;#include <iostream> using namespace std; int main( ) { int i,m1;…

swift自行車品牌介紹_品牌101:簡介

swift自行車品牌介紹Sometimes when I’m around designer friends and there’s a lull in the conversation one of us will blurt out, “What is branding, anyway?” Then we shrug our shoulders and chuckle, knowing that the answer is far too complex to sum up in…

flutter 透明度動畫_Flutter中的動畫填充+不透明度動畫?

flutter 透明度動畫Flutter SDK provides us with many widgets which help us in animating elements on screen easily by implicitly managing the animations i.e. we need not worry about creating and managing intances of AnimationController during the lifecycle o…

阿里 P10 是怎樣的存在?

談起中國頂尖的程序員&#xff0c;很多人首先會想到之前的雷軍、張小龍&#xff0c;還有現在的多隆、行癲、道哥等人&#xff0c;但今天我想聊一聊的這位大神&#xff0c;他的技術成就也同樣令人矚目。19 年獲得國家技術發明二等獎、20 年獲得國家計算機協會頒發的“ CCF 杰出工…

vba交付圖表設計_您是在為交付目的而“設計”嗎?

vba交付圖表設計重點 (Top highlight)It’s a regular Monday morning. All the design team is organizing the tasks for the ongoing week and reviewing requirements and deadlines for the various projects at the studio or company you work at. Suddenly, among the …

正則表達式限制文本框只能輸入數字

許多時候我們在制作表單時需要限制文本框輸入內容的類型&#xff0c;下面我們用正則表達式限制文本框只能輸入數字、小數點、英文字母、漢字等各類代碼。 1.文本框只能輸入數字代碼(小數點也不能輸入) <input οnkeyup"this.valuethis.value.replace(/\D/g,)" …

前端必讀書籍推薦

大家好&#xff0c;我是若川。持續組織了近一年的源碼共讀活動&#xff0c;感興趣的可以 點此掃碼加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系…