oracle 集操作和exists、in的運用情境

來源:互聯網
上載者:User

1 集操作

             定義:把多個sql的結果集,通過邏輯上的整合運算,拼在一起顯示。
             集操作預設下都是按第一個查詢的第一列升序排序,當然除了union all:
             minus:取差集,可用於對兩個結果集進行測試
             union:取並集,除重
             union all:取並集,不剔重
             intersect:取交集

             注釋:
             ① union all不排序、不剔重,在效率上比union高。在業務允許下,用union all,則不用union
             ② 兩表作集操作時,欄位類型、個數要相同,列的名字可以不必相同;若不一樣可補齊,補齊時應注意欄位類型,進行顯示轉換:to_char、to_number、to_date等
             ③ 多個集操作可通過括弧改變sql引擎的執行順序(預設sql引擎是自頂向下)
             ④ union、minus和intersect的共同點:
                剔重、排序、不忽略null
             ⑤ order by只能出現在語句的最後,是對整個集操作結果的排序,列名、別名或者按位置指定,但不能使用第一個select沒有出現的列
             ⑥ 第一個select語句接收列名、別名,或位置記號,查詢結果的列名和第一個select語句保持一致
             ⑦ 可以用於子查詢

   2 exists、in的運用情境

            能不寫子查詢,盡量不寫子查詢,而是直接編寫多表串連操作。理由如下:
            ① oracle CBO在parse階段,會儘可能把子查詢轉化為多表串連
            ② 子查詢可讀性較低
            ③ 複雜的邏輯,子查詢可能導致oracle CBO選擇錯誤的執行路徑
            但如果必須寫子查詢,到底是in還是exists?exists/not exists專門用於關聯子查詢。10g之後,oracle對in的改進,這兩者無甚區別。

            in和select的技術原理:
            ㈠ in:先進行子查詢,再進行主查詢
            ㈡ exists:先進行主查詢,再到子查詢中過濾

           in和exists的使用建議:
            Ⅰ 如果限制性強的條件在子查詢,則使用in
            Ⅱ 如果限制性強的條件在主查詢,則使用exists
            可用查詢結果集來理解上面這段話,採用最佳化匹配原則:拿最小記錄匹配大記錄。限制性強,則結果集小;反之,則大。
            注釋:
            ① 使用exists可以將子查詢結果定位常量,不影響查詢結果,而且,效率高。
               比如:

[sql]
view plaincopyprint?
  1. select e.* 
  2.   from emp e 
  3. where exists  
  4. (select 1 from dept d 
  5.    where e.deptno=d.deptno
    and 
  6.          d.dname='SALES') 
select e.*  from emp e where exists  (select 1 from dept d   where e.deptno=d.deptno and         d.dname='SALES')

            ② not in可能會因為null而改變其行為導致和not exists結果集有出入。然而,在相互關聯的子查詢下,not in和not exists的結果集是一樣的。

原文地址:http://blog.csdn.net/linwaterbin/article/details/7984261

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.