7、子查询
阅读书籍《SQL必知必会(第4版)》笔记
利用第8部分为当前的案例优化重写
SELECT cust_name, cust_contact # 顾客信息
FROM Customers, Orders, OrderItems
WhERE Customers.cust_id = Orders.cust_id
AND Orders.order_num = OrderItems.order_num
AND prod_id = 'gran01';
如下为第7部分给出的:嵌套在其他查询中的查询 query方案
- 在 SELECT 语句中,子查询总是从内向外处理
- 子查询只能查询单个列,企图检索多个列会返回错误
- 如果在 SELECT 操作多个表,就应该使用完全限定名来避免歧义 (表.列名)
# 利用子查询进行过滤(第八部分利用联结表重写了, 如上)
SELECT cust_name, cust_contact # 顾客信息
FROM Customers
WhERE cust_id IN (
SELECT cust_id # 顾客id
FROM Orders
WHERE order_num IN (
SELECT order_num # 订单号
FROM OrderItems
WHERE prod_id = 'gran01'
)
)
# 子查询作为计算字段
-- 子查询对 Orders 中检索出的每一个顾客执行一次
SELECT cust_name,
cust_state,
(
SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id = Customers.cust_id
) AS orders
FROM Customers
ORDER BY cust_name;