【文章內(nèi)容簡介】
by name取得某列中第N大的行select column_name from (select table_name.*,dense_rank() over (order by column desc) rank from table_name) where rank = amp。N;假如要返回前5條記錄:select * from tablename where rownum6。(或是rownum = 5 或是rownum != 6) 假如要返回第59條記錄:select * from tablename where … and rownum10 minus select * from tablename where … and rownum5 order by name 選出結(jié)果后用name排序顯示結(jié)果。(先選再排序)注意:只能用以上符號(、=、!=)。select * from tablename where rownum != 10。返回的是前9條記錄。 不能用:,=,=,Between...and。由于rownum是一個(gè)總是從1開始的偽列,Oracle 認(rèn)為這種條件不成立。另外,這個(gè)方法更快:select * from (select rownum r,a from yourtable where rownum = 20 order by name ) where r 10這樣取出第1120條記錄!(先選再排序再選)要先排序再選則須用select嵌套:內(nèi)層排序外層選。 rownum是隨著結(jié)果集生成的,一旦生成,就不會變化了;同時(shí),生成的結(jié)果是依次遞加的,沒有1就永遠(yuǎn)不會有2! rownum 是在查詢集合產(chǎn)生的過程中產(chǎn)生的偽列,并且如果where條件中存在 rownum 條件的話,則:1: 假如判定條件是常量,則: 只能 rownum = 1, = 大于1 的自然數(shù), = 大于1 的數(shù)是沒有結(jié)果的;大于一個(gè)數(shù)也是沒有結(jié)果的 即 當(dāng)出現(xiàn)一個(gè) rownum 不滿足條件的時(shí)候則 查詢結(jié)束 this is stop key(一個(gè)不滿足,系統(tǒng)將該記錄過濾掉,則下一條記錄的rownum還是這個(gè),所以后面的就不再有滿足記錄,this is stop key);2: 假如判定值不是常量,則:若條件是 = var , 則只有當(dāng) var 為1 的時(shí)候才滿足條件,這個(gè)時(shí)候不存在 stop key ,必須進(jìn)行full scan ,對每個(gè)滿足其他where條件的數(shù)據(jù)進(jìn)行判定,選出一行后才能去選rownum=2的行……以下摘自《中國IT實(shí)驗(yàn)室》 top n 由于oracle不支持select top語句,所以在oracle中經(jīng)常是用order by跟rownum的組合來實(shí)現(xiàn)select top n的查詢。簡單地說,實(shí)現(xiàn)方法如下所示: select 列名1...列名n from(select 列名1...列名n from 表名 order by 列名1...列名n) where rownum=n(抽出記錄數(shù)) order by rownum asc 下面舉個(gè)例子簡單說明一下。顧客表customer(id,name)有如下數(shù)據(jù):ID NAME 01 first 02 Second 03 third 04 forth 05 fifth 06 sixth 07 seventh 08 eighth 09 ninth 10 last 則按NAME的字母順抽出前三個(gè)顧客的SQL語句如下所示:select * from (select * from customer order by name) where rownum=3 order by rownum asc 輸出結(jié)果為: ID NAME 08 eighth 05 fifth 01 first 序列 可以保證多個(gè)用戶對同一張表進(jìn)行操作時(shí)生成唯一的整數(shù),通常用來做表的主鍵。創(chuàng)建序列: create sequence 序列名字 start with 起始值 increment by 增長值 [MaxValue 最大值] [NoMaxValue] //沒有上限 例如: create sequence mySeq start with 1 increment 1刪除序列: drop sequence 序列名字修改序列: alter sequence 序列名字 [start with 起始值] [increment by 增長值] [MaxValue 最大值]查看序列: 使用下列視圖之一: Dba_Sequences All_ Sequences User_ Sequences訪問序列: CurVal 返回序列的當(dāng)前值 NextVal 返回序列的下一個(gè)值例如:select ,city from postConnect by 語句該語句結(jié)合偽列rownum或level 可以產(chǎn)生一個(gè)結(jié)果集.1. 基本用法:產(chǎn)生1~~100之間的整數(shù)Select rownum xh from dual connect by rownum=100。Select level xh from dual connect by level=100。2. 高級用法,漢字內(nèi)碼為:19968~~~40869之間 select t.* from( select rownum xh,nchr(rownum) hz from dual connect by rownum65535 ) t where between 19968 and 40869 使用CTE:with myChinese as( select t.* from( select rownum xh,nchr(rownum) hz from dual connect by rownum65535 ) t where between 19968 and 40869)select * from myChinese where hz=39。東39。 –查找漢字39。東39。的內(nèi)碼with t as (select 39。中華人民共和國39。 sentence from dual)select substr(sentence,rownum,1) from tconnect by rownum=(select length(sentence) from t)order by NLSSORT(substr(sentence,rownum,1) , 39。NLS_SORT=SCHINESE_STROKE_M39。)。按筆畫排序一、集合操作UNION 由每個(gè)查詢選擇的所有不重復(fù)的行 并集不包含重復(fù)值UNION ALL 由每個(gè)查詢選擇的所有的行,包括所有重復(fù)的行 完全并集包含重復(fù)值INTERSECT 由每個(gè)查詢選擇的所有不重復(fù)的相交行 交集MINUS 在第一個(gè)查詢中,不在后面查詢中,并且結(jié)果行不重復(fù) 差集 所有的集合運(yùn)算與等號的優(yōu)先級相同,如果SQL語句包含多個(gè)集合運(yùn)算并且沒有圓括號明確地指定另一個(gè)順序,Oracle服務(wù)器將以從左到右的順序計(jì)算。你應(yīng)該使用圓括號來明確地指定帶另外的集合運(yùn)算的INTERSECT (相交) 運(yùn)算查詢中的賦值順序。Union all 效率一般比union高。 allUNION(聯(lián)合)運(yùn)算 UNION運(yùn)算返回所有由任一查詢選擇的行。用UNION運(yùn)算從