zoukankan      html  css  js  c++  java
  • 相关子查询

    相关子查询是指引用了外部查询中出现的表的列的子查询。这就意味着子查询要依赖于外部查询,不能独立地调用它。在逻辑上,相关子查询会为每个外部行单独计算一次。这篇文章我想从以下两个方面进行总结。

    1,一个相关子查询的简单例子

    2,相关子查询和EXISTS谓词

    一个相关子查询的简单例子

    例如,以下查询会为每个客户返回其订单ID最大的订单。

    SQL查询代码如下:

    -- 相关子查询
    SELECT custid,orderid,orderdate,empid 
    FROM Sales.Orders AS orders1
    WHERE orderid= 
        (SELECT MAX(orders2.orderid) 
        FROM Sales.Orders AS orders2 
        WHERE orders2.custid= orders1.custid);-- 这里引用了外部查询的custid字段

    查询结果:

    image

    相关子查询和EXISTS谓词

    相关子查询通常也和谓词EXISTS一起使用,对于EXISTS,它的输入是一个子查询,如果子查询能够返回任何行,那么它就返回TRUE,否则返回FALSE。

    例如,以下查询语句返回下过订单的西班牙客户。

    SQL查询代码:

    -- 相关子查询和谓词EXISTS
    SELECT customers.custid,customers.companyname 
    FROM Sales.Customers AS customers
    WHERE customers.country=N'Spain' AND EXISTS(SELECT * FROM Sales.Orders AS orders WHERE orders.custid= customers.custid);

    查询结果:

    image

    使用谓词EXISTS的好处之一就是可以用类似英语的语言来直观地表达查询。而且,EXISTS谓词的另一个需要注意的方面是:与T-SQL中的大多数谓词不同,EXISTS谓词使用的是二值逻辑,而不是三值逻辑,也就是说,不知道查询是否有返回行的情况是不存在的。

  • 相关阅读:
    如何获取SQL Server数据库连接字符串的某些部分
    .NET同步原语Barrier简介
    模版引擎RazorEngine简介
    如何使用SQL Server实现SignalR的横向扩展
    SignalR的客户端.NET Client介绍
    一个简单的SignalR例子
    看视频学SignalR—在微软虚拟学院学习SignalR
    看视频学Bootstrap—在微软虚拟学院学习Bootstrap
    C# 窗口与控件的相关操作
    opencv——常见的操作
  • 原文地址:https://www.cnblogs.com/mcgrady/p/3888448.html
Copyright © 2011-2022 走看看