7、子查询

Posted by CodingWithAlice on July 11, 2022

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;