WEB開發(fā) de 點(diǎn)滴

          by sanwish

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

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

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

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

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

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

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

          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'
             )
          

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

          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)
          

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

          如果子查詢不返回任何值,那么整個(gè)查詢將不會(huì)返回任何值。

          =ANY 運(yùn)算符與 IN 等效。例如,要查找與出版商住在同一個(gè)城市的作者,可以使用 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 運(yùn)算符與 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)
          

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

          但是,如果在該查詢中使用 NOT IN,那么結(jié)果將包括除了 Cheryl Carson 和 Abraham Bennet 以外的所有作者,因?yàn)樗麄冏≡?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 運(yùn)算符獲得相同的結(jié)果,該運(yùn)算符與 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 閱讀(229) 評(píng)論(0)  編輯  收藏 所屬分類: Sql
          主站蜘蛛池模板: 西丰县| 西宁市| 乳源| 安顺市| 巴林右旗| 施甸县| 古蔺县| 阿勒泰市| 酒泉市| 临夏县| 十堰市| 龙海市| 和顺县| 焉耆| 白城市| 新宾| 榕江县| 临颍县| 宜兰县| 新蔡县| 黎平县| 尚义县| 甘南县| 会泽县| 玉树县| 信丰县| 阳朔县| 吉木萨尔县| 平昌县| 湟源县| 高阳县| 文安县| 枣庄市| 邵阳市| 东安县| 邳州市| 常熟市| 垣曲县| 疏勒县| 井研县| 仙游县|