在本教程中,我们将学习SQL关联子查询,它是一个依赖于外部查询的子查询。
关联子查询(相关子查询)是依赖于外部查询的子查询。这意味着相关子查询的WHERE子句使用了外部查询的数据。
相关子查询和非相关子查询之间的主要区别在于,不能像执行非相关子查询那样单独执行相关子查询。此外,对于来自外部查询的每个选定行,都执行一次相关子查询。
关联子查询也称为重复子查询或同步子查询。
让我们看一些示例来理解相关子查询的概念。
下面的查询销售额在前5位的客户:
SELECT
companyname,
city,
(
SUM
(unitprice * quantity)
FROM
orders_test
INNER
JOIN
orderdetails
ON
orderdetails.orderid = orders_test.orderid
WHERE
orders_test.customerid = customers.customerid)
AS
total
customers
ORDER
BY
DESC
LIMIT 5;
相关子查询计算每个从客户表中选择的客户的总销售额。从外部查询中选择的customerid被传递到相关子查询,以获取相应的销售数据。
也可以在WHERE子句中使用关联子查询。
例如,以下示例使用WHERE子句中的相关子查询来查找总销售额超过10万的客户:
companyname, city
100000 < (
orders_test.customerid = customers.customerid);
对于每个客户,相关子查询计算总销售额。WHERE子句则检查相关子查询返回的销售总额是否大于10万。
可以在外部查询的HAVING子句中使用关联子查询。请参见以下示例:
t1.categoryID, categoryName
products t1
categories c
c.categoryID = t1.categoryID
GROUP
categoryID
HAVING
MAX
(unitprice) >
ALL
2 *
AVG
(unitprice)
products t2
t1.categoryID = t2.categoryID)
在上述查询中:
原文链接:https://codingdict.com/