1.rownum欄位 Oracle下select語句每個結果集中都有一個偽欄位(偽列)rownum存在。rownum用來標識每條記錄的行號,行號從1開始,每次遞增1。rownum是虛擬的順序值,前提是先排序 使用rownum需註意:1.rownum的是在取數據的時候產生的序號 。當rownum和or ...
1.rownum欄位
Oracle下select語句每個結果集中都有一個偽欄位(偽列)rownum存在。
rownum用來標識每條記錄的行號,行號從1開始,每次遞增1。
rownum是虛擬的順序值,前提是先排序
使用rownum需註意:
1.rownum的是在取數據的時候產生的序號 。當rownum和order by一起使用時,會首先選出符合rownum條件的記錄,然後再進行排序。
2.rownum在過濾時只能使用:<,<= 。rownum在過濾完之後會重新排行號,如果是romnum>n的話,過濾掉不滿足條件的,重新排又從1開始還是不滿足條件,再過濾最終會把所有數據都過濾掉
2.分頁查詢
--top n --查詢工資排名前五的員工信息
--思路:先按工資進行排序,再根據行號過濾留下前5條記錄
--因為SQL語句的執行順序是先執行select返回查詢結果(行號在此時排好)再進行排序
--所以先需要用子查詢,返回排好序的查詢結果
select t.* ,rownum from (select * from emp order by sal desc)t where rownum<=5; --分頁查詢 --查詢工資排名6~10的員工信息
--思路:因為過濾完rownum欄位也會隨之變化,所以rownum不能使用大於號判斷
--所以還是要用子查詢先把行號排好定下來(需要用別名與外層查詢的rownum區分開來)
select * from (select t.*, rownum rown from (select * from emp order by sal desc) t) where rown>5 and rown<=10;
3.rowid
rowid 是Oracle中每個表都有的一個實際存在的一個值,rowid的值是唯一的
4.數據去重
--先創建一張表往裡面插入幾條相同的數據 create table test01(id number(3),name varchar2(10)) insert into test01 values(123,'張三'); insert into test01 values(124,'李四'); insert into test01 values(125,'王五'); insert into test01 values(126,'張三'); insert into test01 values(127,'張三'); insert into test01 values(128,'李四'); insert into test01 values(129,'張三'); --數據去重 --思路:重覆項進行分組,獲取每一組最小(或最大)的rowid,刪除不在此列的數據 delete from test01 where rowid not in( (select min(rowid) from test01 t group by name) );