SQL SERVER 子查询的用法
子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。在此示例中,子查询用作 SELECT 语句中名为 MaxUnitPrice 的列表达式。
USE AdventureWorks2008R2; GO SELECT Ord.SalesOrderID, Ord.OrderDate,(SELECT MAX(OrdDet.UnitPrice)FROM AdventureWorks.Sales.SalesOrderDetail AS OrdDetWHERE Ord.SalesOrderID = OrdDet.SalesOrderID) AS MaxUnitPrice FROM AdventureWorks2008R2.Sales.SalesOrderHeader AS Ord
子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。
许多包含子查询的 Transact-SQL 语句都可以改用联接表示。其他问题只能通过子查询提出。在 Transact-SQL 中,包含子查询的语句和语义上等效的不包含子查询的语句在性能上通常没有差别。但是,在一些必须检查存在性的情况中,使用联接会产生更好的性能。否则,为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。所以在这些情况下,联接方式会产生更好的效果。以下示例显示了返回相同结果集的 SELECT 子查询和 SELECT 联接:
/* SELECT statement built using a subquery. */ SELECT Name FROM AdventureWorks2008R2.Production.Product WHERE ListPrice =(SELECT ListPriceFROM AdventureWorks2008R2.Production.ProductWHERE Name = 'Chainring Bolts' );/* SELECT statement built using a join that returnsthe same result set. */ SELECT Prd1. Name FROM AdventureWorks2008R2.Production.Product AS Prd1JOIN AdventureWorks2008R2.Production.Product AS Prd2ON (Prd1.ListPrice = Prd2.ListPrice) WHERE Prd2. Name = 'Chainring Bolts';
嵌套在外部 SELECT 语句中的子查询包括以下组件:
包含常规选择列表组件的常规 SELECT 查询。
包含一个或多个表或视图名称的常规 FROM 子句。
可选的 WHERE 子句。
可选的 GROUP BY 子句。
可选的 HAVING 子句。
子查询的 SELECT 查询总是使用圆括号括起来。它不能包含 COMPUTE 或 FOR BROWSE 子句,如果同时指定了 TOP 子句,则只能包含 ORDER BY 子句。
子查询可以嵌套在外部 SELECT、INSERT、UPDATE 或 DELETE 语句的 WHERE 或 HAVING 子句内,也可以嵌套在其他子查询内。尽管根据可用内存和查询中其他表达式的复杂程度的不同,嵌套限制也有所不同,但嵌套到 32 层是可能的。个别查询可能不支持 32 层嵌套。任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。
如果某个表只出现在子查询中,而没有出现在外部查询中,那么该表中的列就无法包含在输出(外部查询的选择列表)中。
包含子查询的语句通常采用以下格式中的一种:
WHERE expression [NOT] IN (subquery)
WHERE expression comparison_operator [ANY | ALL] (subquery)
WHERE [NOT] EXISTS (subquery)
SQL SERVER 子查询的用法相关推荐
- SQL Server子查询
SQL Server子查询 一. SQL Server子查询. 子查询是一个嵌套在另一个语句(如:[SELECT],[INSERT],[UPDATE]或[DELETE])语句或其他子查询中的查询.任何 ...
- sql server 子查询的两种方式
单一返回值: (1) 返回单个值 SELECT 列名 FROM 表名 WHERE 列名 = ( SELECT <单列> FROM 该表表名 WHERE<只返回行的条件> ) 例 ...
- sql 标量子查询_SQL Server 2017:标量子查询简化
sql 标量子查询 Nowadays a lot of developers use Object-Relational Mapping (ORM) frameworks. ORM is a prog ...
- 优化SQL Server数据库查询方法
本文详细介绍了优化SQL Server数据库查询方法. SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) ...
- SQL SERVER 中 GO 的用法2
具体不废话了,请看下文详解. 1 2 3 4 5 6 7 8 9 10 use db_CSharp go select *, 备注=case when Grade>=90 then '成绩 ...
- SQL Server FILESTREAM查询和文件组
In this series of the SQL Server FILESTREAM (see TOC at bottom), We have gone through various aspect ...
- sql server嵌套查询
sql server嵌套查询 一 带有IN谓词的子查询 1. 查询与"刘晨"在同一个系学习的学生 SELECT sno ,sname FROM student WHERE sdep ...
- SQL Server 慢查询
SQL Server 慢查询语句查询 1.前10条慢查询 SELECT TOP 10[session_id],[request_id],[start_time] AS '开始时间',[status] ...
- SQL Server 2016 查询存储性能优化小结
SQL Server 2016已经发布了有半年多,相信还有很多小伙伴还没有开始使用,今天我们来谈谈SQL Server 2016 查询存储性能优化,希望大家能够喜欢 作为一个DBA,排除SQL Ser ...
最新文章
- springboot集成rabbitMQ安装+代码
- VS2010 error RC2170: bitmap file xxx.png is not in 3.00 format
- muduo之LogFile
- python实现流媒体传输_基于OpenCV的网络实时视频流传输的实现
- DNS协议详解及报文格式分析
- VTK:vtkNew<vtkDenseArray<double>>用法实战
- 【机器学习】集成学习各方法优缺点特征总结
- windows游戏编程_苹果的Mac和微软的Windows该如何选择?
- c语言年历表程序设计,c语言程序设计年历显示-20210413153548.docx-原创力文档
- TensorFlow tf.keras.callbacks.ModelCheckpoint
- Activity中finish()和onDestroy()的区别
- 微信支付宝是如何赚钱的?
- 在php中实现时间戳,怎么在PHP中对时间戳进行转化
- 1060. 爱丁顿数(25)-PAT乙级真题
- linux去掉空行的几种方法
- scala案例_Scala案例类和案例对象深入(第1部分)
- jar包上传maven私服出错Cannot deploy artifact from the local repository
- Windows Azure 云服务角色架构
- 5 个底层程序设计逻辑,决定你有多牛逼
- 启动SQL Server 时自动执行存储过程