WEB開發(fā) de 點滴

          by sanwish

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            38 隨筆 :: 0 文章 :: 4 評論 :: 0 Trackbacks

          可以用 ALL 或 ANY 關(guān)鍵字修改引入子查詢的比較運算符。SOME 是 SQL-92 標準的 ANY 的等效物。

          由帶修改的比較運算符引入的子查詢返回一列零值或更多值,并且可以包括 GROUP BY 或 HAVING 子句。這些子查詢可通過 EXISTS 重新表述。

          以 > 比較運算符為例,>ALL 表示大于每一個值;換句話說,大于最大值。例如,>ALL (1, 2, 3) 表示大于 3。>ANY 表示至少大于一個值,也就是大于最小值。因此 >ANY (1, 2, 3) 表示大于 1。

          要使帶有 >ALL 的子查詢中的某行滿足外部查詢中指定的條件,引入子查詢的列中的值必須大于由子查詢返回的值的列表中的每個值。

          同樣,>ANY 表示要使某一行滿足外部查詢中指定的條件,引入子查詢的列中的值必須至少大于由子查詢返回的值的列表中的一個值。

          說明??下例可以用多種方法運行,只要內(nèi)部查詢只返回一個值即可。

          USE pubs
          -- Option 1 using MAX in the inner query
          SELECT title
          FROM titles
          HAVING MAX(advance) > ALL
          WHERE advance > ALL
             (
              SELECT MAX(advance)
              FROM publishers INNER JOIN titles ON 
                titles.pub_id = publishers.pub_id
              WHERE pub_name = 'Algodata Infosystems'
             )
          
          -- Option 2 using GROUP BY and HAVING and no ALL 
          USE pubs
          SELECT title
          FROM titles
          GROUP BY title
          HAVING MAX(advance) > 
             (
              SELECT MAX(advance)
              FROM publishers INNER JOIN titles ON 
                titles.pub_id = publishers.pub_id
              WHERE pub_name = 'Algodata Infosystems'
             )
          

          下面的查詢提供一個由 ANY 修改的比較運算符引入的子查詢的示例。它將查找收到的預付款大于 Algodata Infosystems 支付的最低預付款金額的書名。

          USE pubs
          SELECT title
          FROM titles
          WHERE advance > ANY
             (SELECT advance
             FROM publishers INNER JOIN titles
             ON titles.pub_id = publishers.pub_id
                AND pub_name = 'Algodata Infosystems')
          

          下面是結(jié)果集:

          title
          ---------------------------------------------------------------
          You Can Combat Computer Stress!
          The Gourmet Microwave
          But Is It User Friendly?
          Secrets of Silicon Valley
          Computer Phobic and Non-Phobic Individuals: Behavior Variations
          Life Without Fear
          Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean
          Sushi, Anyone?
          
          (8 row(s) affected)
          

          對于每種書名,內(nèi)部查詢查找一列由 Algodata 支付的預付款金額。外部查詢查看列表中的所有值,并確定當前考慮的書名是否已收到大于任何其它金額的預付款。換句話說,將查找預付款等于或大于 Algodata 支付的最低金額的書名。

          如果子查詢不返回任何值,那么整個查詢將不會返回任何值。

          =ANY 運算符與 IN 等效。例如,要查找與出版商住在同一個城市的作者,可以使用 IN 或 =ANY。

          USE pubs
          SELECT au_lname, au_fname
          FROM authors
          WHERE city IN
             (SELECT city
             FROM publishers)
          
          USE pubs
          SELECT au_lname, au_fname
          FROM authors
          WHERE city = ANY
             (SELECT city
             FROM publishers)
          

          下面是任一查詢的結(jié)果集:

          au_lname         au_fname
          --------         ---------
          Carson         Cheryl
          Bennet         Abraham
          
          (2 row(s) affected)
          

          但是,< >ANY 運算符與 NOT IN 有所不同:< >ANY 表示不等于 a,或不等于 b,或不等于 c。而 NOT IN 表示不等于 a,且不等于 b,且不等于 c。但 <>ALL 與 NOT IN 意義相同。

          例如,下面的查詢查找在沒有出版商的城市中居住的作者。

          USE pubs
          SELECT au_lname, au_fname
          FROM authors
          WHERE city <> ANY
             (SELECT city
             FROM publishers)
          

          下面是結(jié)果集:

          au_lname                                 au_fname             
          ---------------------------------------- -------------------- 
          White                                    Johnson              
          Green                                    Marjorie             
          Carson                                   Cheryl               
          O'Leary                                  Michael              
          Straight                                 Dean                 
          Smith                                    Meander              
          Bennet                                   Abraham              
          Della Buena                              Ann                  
          Gringlesby                               Burt                 
          Locksley                                 Charlene             
          Greene                                   Morningstar          
          Blotchet-Halls                           Reginald             
          Yokomoto                                 Akiko                
          del Covello                              Innes                
          DeFrance                                 Michel               
          Stringer                                 Dirk                 
          MacFeather                               Stearns              
          Karsen                                   Livia                
          Panteley                                 Sylvia               
          Hunter                                   Sheryl               
          McBadden                                 Heather              
          Ringer                                   Anne                 
          Ringer                                   Albert               
          
          (23 row(s) affected)
          

          因為每個作者所在的城市中都有一個或多個出版商不在那里居住,所以結(jié)果包括所有 23 個作者。內(nèi)部查詢找出所有住有出版商的城市,然后對于每個城市,外部查詢查找不住在該城市的作者。

          但是,如果在該查詢中使用 NOT IN,那么結(jié)果將包括除了 Cheryl Carson 和 Abraham Bennet 以外的所有作者,因為他們住在 Algodata Infosystems 所處的 Berkeley。

          USE pubs
          SELECT au_lname, au_fname
          FROM authors
          WHERE city NOT IN
             (SELECT city
             FROM publishers)
          

          下面是結(jié)果集:

          au_lname                                 au_fname             
          ---------------------------------------- -------------------- 
          White                                    Johnson              
          Green                                    Marjorie             
          O'Leary                                  Michael              
          Straight                                 Dean                 
          Smith                                    Meander              
          Della Buena                              Ann                  
          Gringlesby                               Burt                 
          Locksley                                 Charlene             
          Greene                                   Morningstar          
          Blotchet-Halls                           Reginald             
          Yokomoto                                 Akiko                
          del Covello                              Innes                
          DeFrance                                 Michel               
          Stringer                                 Dirk                 
          MacFeather                               Stearns              
          Karsen                                   Livia                
          Panteley                                 Sylvia               
          Hunter                                   Sheryl               
          McBadden                                 Heather              
          Ringer                                   Anne                 
          Ringer                                   Albert               
          
          (21 row(s) affected)
          

          還可以通過使用 < >ALL 運算符獲得相同的結(jié)果,該運算符與 NOT IN 等效。

          USE pubs
          SELECT au_lname, au_fname
          FROM authors
          WHERE city <> ALL
             (SELECT city
             FROM publishers)
          
          posted on 2008-11-10 10:02 sanwish 閱讀(231) 評論(0)  編輯  收藏 所屬分類: Sql
          主站蜘蛛池模板: 石家庄市| 阳泉市| 富源县| 石泉县| 拉孜县| 荆州市| 平南县| 镇宁| 广灵县| 许昌县| 镇安县| 鸡西市| 和平县| 临澧县| 景泰县| 嘉峪关市| 海林市| 绥芬河市| 牡丹江市| 南皮县| 仁怀市| 鹤峰县| 抚顺县| 尼玛县| 长垣县| 乌兰浩特市| 项城市| 峨边| 绵阳市| 五寨县| 鹿邑县| 陇南市| 临江市| 常德市| 岑巩县| 集安市| 婺源县| 高密市| 蓝山县| 揭阳市| 江油市|