我发现很难理解下面的代码。你能给我一个关于代码如何工作的逻辑流程吗?
问题 - 假设您要显示Customers表中每个客户的订单总数。订单与相应的客户ID一起存储在订单表中。
步骤 -
解决方案 -
SELECT cust_name, cust_state,
(SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id = Customers.cust_id
)
AS order_nos
FROM Customers
ORDER BY cust_name
我无法理解括号内的count(*)部分。请帮我解决一下。
感谢。
答案 0 :(得分:0)
它只计算行数。在这种情况下,这是每个客户的订单数量。替代 COUNT(column_name)为您提供 column_name 不为空的行数。
没有子查询的等价物(改为使用组):
SELECT cust_name, cust_state, COUNT(orders.cust_id) order_nos
FROM Customers
LEFT OUTER JOIN Orders on Customers.cust_id = Orders.cust_id
GROUP BY cust_name, cust_state
ORDER BY cust_name
答案 1 :(得分:0)
它被称为相关子查询。从本质上讲,对于每个客户,您将获得客户拥有的订单数量。 “魔术”位于子查询的WHERE Orders.cust_id = Customers.cust_id
子句中。这是将此结果与您的主查询相关联的部分。它说“从主查询中获取cust_id,现在找到cust_id是cust_id的订单数。”