使用子查询
程序员文章站
2022-09-05 12:59:27
子查询子查询,即嵌套在其他查询中的查询利用子查询进行过滤列出订购物品TNT2的所有客户,该如何检索?- 检索包含物品TNT2的所有订单的编号- 检索具有前一步骤列出的订单编号的所有客户的ID- 检索迁移步骤返回的所有客户ID的客户信息可把一条SELECT语句返回的结果用于另一条SELECT语句的WHERE子句- 列出两个包含此物品的订单SELECT order_numFROM orderitemsWHERE prod_id = 'TNT2';- 查询具有订单20005和20007...
子查询
子查询,即嵌套在其他查询中的查询
利用子查询进行过滤
列出订购物品TNT2的所有客户,该如何检索?
- 检索包含物品TNT2的所有订单的编号
- 检索具有前一步骤列出的订单编号的所有客户的ID
- 检索迁移步骤返回的所有客户ID的客户信息
可把一条SELECT语句返回的结果用于另一条SELECT语句的WHERE子句
- 列出两个包含此物品的订单
SELECT order_num
FROM orderitems
WHERE prod_id = 'TNT2';
- 查询具有订单20005和20007的客户ID
SELECT cust_id
FROM orders
WHERE order_num IN (20005, 20007)
将上述两个查询进行综合
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'));
子查询一般与IN操作符结合使用,
但也可用于测试等于,不等于等
作为计算字段使用子查询
显示customer表中每个客户的订单总数
- 从customers表中检索客户列表
- 对于检索出的每个客户,统计其在orders表中的订单数目
对客户10001的订单进行计数
SELECT COUNT(*) AS orders
FROM orders
WHERE cust_id = 10001;
为了对每个客户执行COUNT(*)计算,应该将COUNT(*)作为一个子查询
SELECT cust_name,
cust_state,
(SELECT COUNT(*)
FROM orders
WHERE orders.cust_id = customers.cust_id) AS orders
FROM customers
ORDER BY cust_name;
上述SELECT语句,对customers表中每个客户返回3列
orders是一个计算字段,
是由圆括号中的子查询建立的,
该子查询对检索出的每个客户执行一次
子查询中的WHERE子句使用了完全限定名
这种类型的子查询称为相关子查询[涉及外部查询的子查询]
任何时候只要列名可能有多义性,就需用完全限定方式
采用子查询时,要在测试正确基础上,逐层构建,来保证结果稳定
本文地址:https://blog.csdn.net/x13262608581/article/details/108984068
下一篇: 6. MyBatisPlus实现乐观锁