从这一篇开始要总结子查询了,什么是子查询呢?子查询就是将内部查询的结果供外部查询使用,内部查询可以取代基于常量或变量的表达式,并在运行时进行计算。通过使用子查询,可以避免在查询解决方案中把操作分成多个步骤,并在变量中保存中间查询结果的需要。
子查询可以分为独立子查询和相关子查询,那么这一篇我们总结的就是独立子查询,我想分为以下几个方面进行总结。
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);
查询结果:
这里,有一个需要注意的地方,就是对于有效的标量子查询,它的返回值不能超过一个(也可以没有)。如果标量子查询返回了多个值,在运行时就会失败。如下面的例子,尝试用这条查询语句来查找姓氏以字母D开头的职员的订单。
SQL查询代码:
SELECT orderid FROM Sales.Orders WHERE empid=(SELECT employees.empid FROM HR.Employees AS employees WHERE employees.lastname LIKE N'D%');
查询结果:
独立多值子查询
多值子查询就是在一个列中返回多个值的子查询。多值子查询通常与谓词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%');
查询结果:
注意,使用子查询完成的任务,很多时候也可以使用联接来解决。比如,上面的例子使用联接来实现的话。
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%';
查询结果同使用子查询。
所以,到底是使用子查询还是联接查询,这个要看具体需求。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架