欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用子查询

程序员文章站 2022-05-01 19:53:00
子查询子查询,即嵌套在其他查询中的查询利用子查询进行过滤列出订购物品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