喝咖啡的企鵝

          先做事情,再看心情……
          posts - 16, comments - 0, trackbacks - 0, articles - 0

          (轉(zhuǎn))Oracle集合運(yùn)算

          Posted on 2009-11-30 16:29 咖啡企鵝 閱讀(723) 評論(0)  編輯  收藏 所屬分類: SQL

          DIY部落(http://www.diybl.com/course/7_databases/oracle/oraclexl/20090825/171870.html)

          ■■集合運(yùn)算(UNION、UNION ALL、INTERSECT、MINUS)
             集合運(yùn)算組合兩個(gè)或多個(gè)部分查詢的結(jié)果到一個(gè)結(jié)果中。包含集合運(yùn)算的查詢稱為復(fù)合查詢。
          Operator  Returns
          UNION(聯(lián)合)  由每個(gè)查詢選擇的所有不同的行(無重復(fù)值)
          UNION ALL  由每個(gè)查詢選擇的所有的行,包括所有重復(fù)的行
          INTERSECT(交叉)  由兩個(gè)查詢選擇的所有不同的行
          MINUS   由第一個(gè)查詢選擇的所有不同的行
          所有的集合運(yùn)算與等號的優(yōu)先級相同,如果SQL語句包含多個(gè)集合運(yùn)算并且沒有圓括號明確地指定另一個(gè)順序,Oracle服務(wù)器將以從左到右的順序計(jì)算。你應(yīng)該使用圓括號來明確地指定帶另外的集合運(yùn)算INTERSECT (相交) 運(yùn)算查詢中的賦值順序。
              INTERSECT (相交) 和MINUS (相減) 運(yùn)算不是ANSI SQL-99兼容的,他們是Oracle特定的。


          ■聯(lián)合(UNION)
          UNION(聯(lián)合)運(yùn)算
          UNION運(yùn)算返回所有由任一查詢選擇的行。用UNION運(yùn)算從多表返回所有行,但除去任何重復(fù)的行。
          ?原則
          :: 被選擇的列數(shù)和列的數(shù)據(jù)類型必須是與所有用在查詢中的SELECT語句一致。列的名字不必相同。
          :: 聯(lián)合運(yùn)算在所有被選擇的列上進(jìn)行。
          :: 在做重復(fù)檢查的時(shí)候不忽略空(NULL)值。
          :: IN運(yùn)算有比UNION運(yùn)算高的優(yōu)先級。
          :: 在默認(rèn)情況下,輸出以SELECT子句的第一列的升序排序。


          ■全聯(lián)合(UNION ALL)
          運(yùn)算從兩個(gè)查詢返回包括所有重復(fù)值的結(jié)果
          原則
          :: 和聯(lián)合不同,重復(fù)的行不被過濾,并且默認(rèn)情況下輸出不排序。
          :: 不能使用DISTINCT關(guān)鍵字。
             注:除了上面的兩點(diǎn),UNION ALL的原則與UNION相同。


          ■相交(INTERSECT)
          用相交運(yùn)算返回多個(gè)查詢中所有的公共行。
          原則
          :: 在查詢中被 SELECT 語句選擇的列數(shù)和數(shù)據(jù)類型必須與在查詢中所使用的所有的 SELTCT 語句中的   一樣,但列的名字不必一樣。
          :: 顛倒相交的表的排序不改變結(jié)果。
          :: 相交不忽略空值。


          ■相減(MINUS)
          用相減運(yùn)算返回由第一個(gè)查詢返回的行,那些行不出現(xiàn)在第二個(gè)查詢中 (第一個(gè)SELECT語句減第二個(gè)SELECT語句)。
          原則
          :: 在查詢中被SELECT語句選擇的列數(shù)和數(shù)據(jù)類型必須與在查詢中所使用的所有的SELTCT語句中的一樣,但列的名字不必一樣。
          :: 對于MINUS運(yùn)算,在WHERE子句中所有的列都必須在SELECT子句中。

          ※集合運(yùn)算的原則
          :: 在兩個(gè)SELECT列表中的表達(dá)式必須在數(shù)目上和數(shù)據(jù)類型上相匹配
          :: 可以用圓括號改變執(zhí)行的順序
          :: ORDER BY子句:
           –只能出現(xiàn)在語句的最后
           –從第一個(gè)SELECT語句接收列名、別名,或者位置記號
          :: 集合運(yùn)算可以用在子查詢中。


          ■Oracle 服務(wù)器和集合運(yùn)算
          :: 除了UNION ALL,重復(fù)行自動(dòng)被清除
          :: 在結(jié)果中的列名是第一個(gè)查詢中出現(xiàn)的列名
          :: 除了UNION ALL(無排序),默認(rèn)情況下按升序順序輸出
          在一個(gè)復(fù)合查詢的各查詢組成部分的選擇列表中相應(yīng)的表達(dá)式必須在數(shù)目和類型上匹配。如果查詢的組成部分選擇字符數(shù)據(jù),返回值的數(shù)據(jù)類型被如下決定:
           :: 如果查詢選擇的數(shù)據(jù)類型的值為CHAR,那么,返回值的數(shù)據(jù)類型也為CHAR。
           :: 如果查詢選擇的兩者之一或兩者的數(shù)據(jù)類型值為VARCHAR2,那么,返回值的數(shù)據(jù)類型也是VARCHAR2。


            你可能需要提及,輸出以第一個(gè)SELECT子句的第一列的升序被排序,然后是第二列,等等。


          ■匹配SELECT語句 //湊數(shù)
          eg:
          SELECT department_id, TO_NUMBER(null) location, hire_date
          FROM employees
          UNION
          SELECT department_id, location_id, TO_DATE(null)
          FROM departments;


          DEPARTMENT_ID   LOCATION HIRE_DATE
          ------------- ---------- ----------
                     80            21-4月 -00
                     90       1700
                     90            17-6月 -87
                     90            21-9月 -89
                     90            13-1月 -93
                    100       1700
                    100            16-8月 -94
                    100            17-8月 -94
                    100            28-9月 -97
                    100            30-9月 -97
                    100            07-3月 -98


          匹配SELECT語句
              由于在兩個(gè)查詢的SELECT列表中的表達(dá)式必須在數(shù)量上匹配,你可以使用虛擬列和轉(zhuǎn)換函數(shù)數(shù)據(jù)類型來滿足該規(guī)則。在幻燈片中使用了虛擬列,在第一個(gè)查詢中的TO_NUMBER函數(shù)被用以匹配第二個(gè)查詢中返回的LOCATION_ID列的數(shù)字?jǐn)?shù)據(jù)類型,同樣地,第二個(gè)查詢中的TO_DATE函數(shù)被用于匹配 第一個(gè)查詢返回的日期數(shù)據(jù)類型。

          DIY部落(http://www.diybl.com/course/7_databases/oracle/oraclexl/20090825/171870.html)

          主站蜘蛛池模板: 白河县| 阳东县| 东光县| 梁山县| 浑源县| 临潭县| 汕头市| 嘉定区| 石林| 黑河市| 无棣县| 灌阳县| 化州市| 康保县| 惠安县| 内黄县| 南城县| 汉川市| 通许县| 大宁县| 文化| 安平县| 博湖县| 宣汉县| 湖口县| 吉林省| 邯郸市| 长沙市| 晋中市| 汉寿县| 南和县| 宁乡县| 永胜县| 准格尔旗| 铅山县| 资源县| 隆昌县| 个旧市| 板桥市| 嘉义市| 台南县|