日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle分组后伪列,Oracle伪列和伪表和分组函数(row_number,Rank)

發布時間:2025/3/11 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle分组后伪列,Oracle伪列和伪表和分组函数(row_number,Rank) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

oracle的偽列以及偽表

oracle系統為了實現完整的關系數據庫功能,系統專門提供了一組成為偽列(Pseudocolumn)的數據庫列,這些列不是在建立對象時由我們完成的,而是在我們建立時由Oracle完成的。Oracle目前有以下偽列:

一、偽列:

CURRVAL AND NEXTVAL 使用序列號的保留字

LEVEL 查詢數據所對應的層級

ROWID 記錄的唯一標識

ROWNUM 限制查詢結果集的數量

Rowid的概念:rowid是一個偽列,既然是偽列,那么這個列就不是用戶定義,而是系統自己給加上的。對每個表都有一個rowid的偽列,但是表中并不物理存儲ROWID列的值。不過你可以像使用其它列那樣使用它,但是不能刪除改列,也不能對該列的值進行修改、插入。一旦一行數據插入數據庫,則rowid在該行的生命周期內是唯一的,即即使該行產生行遷移,行的rowid也不會改變。

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

二、偽表

DUAL 表

該表主要目的是為了保證在使用SELECT語句中的語句的完整性而提供的。

一般用于驗證函數。例如:

select sysdate,to_char(sysdate,'yyyy-mm-dd HH24:mm:ss') from dual

oracle的幾個偽列函數

ORACLE有幾個函數專門用來產生偽列的,rownum,rowid,row_number(),rank,dense_rank,lan

1 Connect by 語句

該語句結合偽列rownum或level 可以產生一個結果集.

1.?基本用法:

產生1~~100之間的整數

Select rownum xh from dual connect by rownum<=100;

Select level xh from dual connect by level<=100;

2.?高級用法

2.1.產生所有漢字,漢字內碼為:19968~~~40869之間

select t.* from(

select rownum xh,nchr(rownum) hz from dual

connect by rownum<65535

) t

where t.xh between 19968 and 40869

2 rownum按行的順序自動增加產生

row_number() 給每個組內的不同記錄進行排號(分組可不設)

select t.c_group,

t.c_code,

t.c_desc,

row_number() over(PARTITION BY c_group ORDER BY c_desc DESC) rn

from tp_dictionary t

where t.c_group in ('PPSJ001', 'PPSJ002');

3 Rank() 按并列情況跨越排序

select t.c_group,

t.c_code,

t.c_desc,

Rank() over( ORDER BY c_code ) rn

from tp_dictionary t

where t.c_group in ('PPGL001', 'PPSJ002');

4 Dense_Rank() 按并列情況排序,不跳躍

select t.c_group,

t.c_code,

t.c_desc,

Dense_rank() over( ORDER BY c_code ) rn

from tp_dictionary t

where t.c_group in ('PPGL001', 'PPSJ002');

5 Lag對列進行偏移(下面是偏移2列)

select t.c_group,

t.c_code,

t.c_desc,

lag(c_code,2,null) over(PARTITION BY c_group ORDER

BY c_desc asc) rn

from tp_dictionary t

where t.c_group in ('PPGL001', 'PPSJ002');

總結

以上是生活随笔為你收集整理的oracle分组后伪列,Oracle伪列和伪表和分组函数(row_number,Rank)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。