2016.9.9《Oracle查詢最佳化改寫技巧與案例》電子工業出版社一書中的技巧

來源:互聯網
上載者:User

標籤:

1、coalesce (c1,c2,c3,c4,...) 類似於nvl但可以從多個運算式中返回第一個不是null的值

2、要在where條件中引用列的別名,可以再嵌套一層查詢

select * from ( select salary gz from person) where gz>100

3、like()函數的萬用字元除了%號外,還有_代表一個字元,若要在like裡表達_符號需轉義:

like(‘\_BCD‘) escape ‘\‘ escape 用來定義轉義符,此時可以寫‘\\‘代表真正的‘\‘符號

4、order by 1或2等數字 表示按第幾列排序 (count(1)是不是也類似?)

5、substr(aa,-3)表示取倒數後3位,但不適用於指定起始位置,例如不能用substr(aa,3,-2)

6、排序時控制空值記錄排在前或在後: order by xx nulls first(nulls last)

7、with.. as... 建立只在語句執行時存在的臨時視圖

with e as (select ad_hp_id id, code_id code , txt_name name from ad_hp where code_id like ‘ZB%‘)

select id,code, name from e

8、left join的where、order 語句可寫在on語句之後

9、內串連相當於直接where兩表欄位相等,只有兩表都匹配的資料才出現

全串連兩張表所有記錄都出現,不匹配的項顯示為null

左右串連可以像正常兩表用where關聯方式寫,只不過在右表條件前加上(+):

select a.code_id,b.* from ad_hp a, bureau b

where a.code_id LIKE ‘ZB%‘

and a.txt_name_admin = b.bureau_code(+)

ORDER BY a.code_id

10、11g以後增加了統計字串中的某字元數的函數regexp_count(‘ababcabcd‘,‘a‘) ,結果=3

11、按某列排序後,取它最大或最小值對應的其它列 max(col1) keep(dense_rank first或last order by col2)

如果要在分組內部統計,可用 over(partition by col3)。也可用group by 分組

select max(code_id) keep(dense_rank first order by geo_lat) from ad_hp t where code_id like ‘ZB%‘

12、在樹型資料結構中,列舉某一節點所有後代節點(第12章)

select empno as 員工編碼, ename as 姓名,mgr as 主管編碼,(prior ename) as 主管姓名,sys_connect_by_path(ename,‘,‘) as 路徑

from scott.emp

start with empno=7566

connect by (prior empno)=mgr

2016.9.9《Oracle查詢最佳化改寫技巧與案例》電子工業出版社一書中的技巧

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.