• 独立子查询


    从这一篇开始要总结子查询了,什么是子查询呢?子查询就是将内部查询的结果供外部查询使用,内部查询可以取代基于常量或变量的表达式,并在运行时进行计算。通过使用子查询,可以避免在查询解决方案中把操作分成多个步骤,并在变量中保存中间查询结果的需要。

    子查询可以分为独立子查询和相关子查询,那么这一篇我们总结的就是独立子查询,我想分为以下几个方面进行总结。

    1,独立标量子查询

    2,独立多值子查询

    独立标量子查询

    独立标量子查询就是返回单个值的子查询,标量子查询可以出现在外部查询中期望使用单个值的任何地方,包括WHERE,SELECT,等等。

    下面是一个例子,假设现在要查询Orders表,返回表中订单ID最大的订单信息。

    SQL查询代码:

    USE TSQLFundamentals2008;
    GO
    
    -- 独立标题子查询
    SELECT orderid,orderdate,empid,custid 
    FROM Sales.Orders
    WHERE orderid= (SELECT MAX(orderid) FROM Sales.Orders);

    查询结果:

    image

    这里,有一个需要注意的地方,就是对于有效的标量子查询,它的返回值不能超过一个(也可以没有)。如果标量子查询返回了多个值,在运行时就会失败。如下面的例子,尝试用这条查询语句来查找姓氏以字母D开头的职员的订单。

    SQL查询代码:

    SELECT orderid 
    FROM Sales.Orders
    WHERE empid=(SELECT employees.empid FROM HR.Employees AS employees WHERE employees.lastname LIKE N'D%');

    查询结果:

    image

    独立多值子查询

    多值子查询就是在一个列中返回多个值的子查询。多值子查询通常与谓词IN一起使用,例如,就像上面的那个例子,使用多值子查询来写如下查询代码。

    SQL查询代码:

    -- 独立多值子查询
    SELECT orderid,empid 
    FROM Sales.Orders
    WHERE empid IN (SELECT employees.empid FROM HR.Employees AS employees WHERE employees.lastname LIKE N'D%');

    查询结果:

    image

    注意,使用子查询完成的任务,很多时候也可以使用联接来解决。比如,上面的例子使用联接来实现的话。

    SQL查询代码:

    -- 使用联接查询实现
    SELECT orders.orderid,employees.empid 
    FROM HR.Employees AS employees
    LEFT JOIN Sales.Orders AS orders ON employees.empid = orders.empid
    WHERE employees.lastname LIKE N'D%';

    查询结果同使用子查询。

    所以,到底是使用子查询还是联接查询,这个要看具体需求。

  • 相关阅读:
    flash处理安全策略
    flash builder 命令行创建 AsDoc
    如何永久关闭选项"Tools > Close Other Forms"
    Oracle EBS Reports 日期格式 与 客户端日期格式(控制面板 > 区域和语言选项)
    ora00600 Metalink ID: 752428.1
    如何修改台EBS的用户密码
    dbms_utility.format_error_backtrace() 返回错误行
    SQL*PLUS命令的使用大全
    APPPER50022 (system administrator > profile > system . HR:User Type)
    客户端连接数据时会报“ORA12537:TNS连接已关闭”
  • 原文地址:https://www.cnblogs.com/mcgrady/p/3888422.html
Copyright © 2020-2023  润新知