随笔 - 410  文章 - 0  评论 - 519  阅读 - 148万 

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

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谓词使用的是二值逻辑,而不是三值逻辑,也就是说,不知道查询是否有返回行的情况是不存在的。

posted on   永远的麦子  阅读(6505)  评论(3编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示