orale sql一些特殊sql示例
阿新 • • 發佈:2018-12-13
1、rowid(行標示符)概述 rowid是一個用來唯一標記表中行的偽列。它是物理表中行資料的內部地址(唯一),包含兩個地址,其一為指向資料表中包含該行的塊所存放資料檔案的地址,另一個是可以直接定位到資料行自身的這一行在資料塊中的地址
orale 刪除相同的資料
delete from TABLE_NAME a
where rowid != (select max(rowid)
from TABLE_NAME t
where a.id = t.id)
2、Rownum(行號) 根據排序插入一列序號
SELECT t.id, row_number() over(order by t.aa desc) order_num FROM table1 t
Rownum 不同分頁寫法的比較 –>> 方式一 在查詢的最外層控制分頁的最小值和最大值
SELECT * FROM
(
SELECT B.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) B
)
WHERE RN BETWEEN 1AND 20
—>>方式 二 絕大多數的情況下,第2個查詢的效率比第1個高得多。
SELECT * FROM ( SELECT B.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) B WHERE ROWNUM <= 20 ) WHERE RN >= 1
3、NAL
SELECT NVL(T.ID,0) AS ID FROM TABLE_NAME T
nvl(欄位名,0),就是當你選出來的時候,這個欄位雖然為空,但是顯示的是0,當然這個0也可以換成其他東西,如:1,2,3……
4、Merge into
-全部男生記錄 create table fzq1 as select * from fzq where sex=1; --全部女生記錄 create table fzq2 as select * from fzq where sex=0; /*涉及到兩個表關聯的例子*/ --更新表fzq1使得id相同的記錄中chengji欄位+1,並且更新name欄位。 --如果id不相同,則插入到表fzq1中. --將fzq1表中男生記錄的成績+1,女生插入到表fzq1中 merge into fzq1 aa --fzq1表是需要更新的表 using fzq bb -- 關聯表 on (aa.id=bb.id) --關聯條件 when matched then --匹配關聯條件,作更新處理 update set aa.chengji=bb.chengji+1, aa.name=bb.name --此處只是說明可以同時更新多個欄位。 when not matched then --不匹配關聯條件,作插入處理。如果只是作更新,下面的語句可以省略。 insert values( bb.id, bb.name, bb.sex,bb.kecheng,bb.chengji);