使用子查询——在where子句中的in操作符中&用来填充计算列

1.子查询

子查询:即嵌套在其他查询中的查询。


2.利用子查询进行过滤

在使用子查询时,把子查询分解为多行并且适当地进行缩进,能极大地简化子查询的使用。
在这里插入图片描述


3.作为计算字段使用子查询

在这里插入图片描述
相关子查询:涉及外部查询的子查询,只要列名可能有多义
性,就必须使用这种语法(表名和列名由一个句点分隔)。
where A表.字段= B表.字段


-- 子查询,分步骤先查出最里面的子查询,再一步步往外层查询
-- 第一步,检索包含物品TNT2的所有订单的编号
SELECT order_num FROM orderitems WHERE prod_id = 'TNT2';
-- 第二步,检索具有前一步骤列出的订单编号的所有客户的ID
SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id = 'TNT2');
-- 第三步,检索前一步骤返回的所有客户ID的客户信息
SELECT cust_name, cust_contact
FROM customers 
WHERE cust_id IN (SELECT cust_id 
                         FROM orders 
                         WHERE order_num IN (SELECT order_num 
	                                     FROM orderitems 
	                                     WHERE prod_id = 'TNT2'));

-- 将count(*)作为子查询,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 ;

猜你喜欢

转载自blog.csdn.net/weixin_49984044/article/details/108725038