目录
子查询是嵌套在另外一个SELECT、INSERT、UPDATE或DELETE语句中的SELECT查询。一个子查询也可以嵌套在另外一个子查询中。子查询经常被重写成普通的JOIN,但是有时检测是否存在值的子查询能比等价的非子查询的方式执行得更好。
相关子查询是指结果依赖于外部查询值的子查询,是主查询遍历每条查询的记录时都要针对该记录的值执行的子查询,效率比较低。
1.使用子查询检验匹配的存在
use adventureworks
go
SELECT DISTINCT s.PurchaseOrderNumber
FROM Sales.salesOrderHeader s
WHERE EXISTS ( SELECT SalesOrderID
FROM Sales.SalesOrderDetail
WHERE UnitPrice
BETWEEN 1000 AND 2000 AND SalesOrderID=s.SalesOrderID)
2.普通的非相关子查询:
use adventureworks
go
SELECT SalesPersonID,SalesQuota CurrentSalesQuota
FROM Sales.SalesPerson
WHERE SalesQuota=(SELECT MAX(SalesQuota)
FROM Sales.SalesPerson)