zoukankan      html  css  js  c++  java
  • (转)用 ANY、SOME 或 ALL 修改的比较运算符 Timothy

    可以用 ALL 或 ANY 关键字修改引入子查询的比较运算符。SOME 是 SQL-92 标准的 ANY 的等效物。

    由带修改的比较运算符引入的子查询返回一列零值或更多值,并且可以包括 GROUP BY 或 HAVING 子句。这些子查询可通过 EXISTS 重新表述。

    以 > 比较运算符为例,>ALL 表示大于每一个值;换句话说,大于最大值。例如,>ALL (1, 2, 3) 表示大于 3。>ANY 表示至少大于一个值,也就是大于最小值。因此 >ANY (1, 2, 3) 表示大于 1。

    要使带有 >ALL 的子查询中的某行满足外部查询中指定的条件,引入子查询的列中的值必须大于由子查询返回的值的列表中的每个值。

    同样,>ANY 表示要使某一行满足外部查询中指定的条件,引入子查询的列中的值必须至少大于由子查询返回的值的列表中的一个值。

    说明  下例可以用多种方法运行,只要内部查询只返回一个值即可。

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

    下面是结果集:

    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)
    

    对于每种书名,内部查询查找一列由 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)
    

    下面是任一查询的结果集:

    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)
    

    下面是结果集:

    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)
    

    因为每个作者所在的城市中都有一个或多个出版商不在那里居住,所以结果包括所有 23 个作者。内部查询找出所有住有出版商的城市,然后对于每个城市,外部查询查找不住在该城市的作者。

    但是,如果在该查询中使用 NOT IN,那么结果将包括除了 Cheryl Carson 和 Abraham Bennet 以外的所有作者,因为他们住在 Algodata Infosystems 所处的 Berkeley。

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

    下面是结果集:

    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 运算符获得相同的结果,该运算符与 NOT IN 等效。

    USE pubs
    SELECT au_lname, au_fname
    FROM authors
    WHERE city <> ALL
    (SELECT city
    FROM publishers)
    
  • 相关阅读:
    YourSQLDba遭遇.NET Framework Error 6522
    ORACLE NLS_DATE_FORMAT设置
    RHEL下SendMail修改发邮箱地址
    SQL Server如何定位自定义标量函数被那个SQL调用次数最多浅析
    ORACLE归档日志比联机重做日志小很多的情况总结
    ORACLE获取SQL绑定变量值的方法总结
    ORACLE SEQUENCE跳号总结
    ORACLE中seq$表更新频繁的分析
    批量修改所有服务器的dbmail配置
    MySQL 修改账号的IP限制条件
  • 原文地址:https://www.cnblogs.com/haiyang1985/p/1419914.html
Copyright © 2011-2022 走看看