Oracle sql一些特殊sql示例

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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章