(3) 检索前一步骤返回的所有客户ID的客户信息 。
上述每个步骤都可以单独作为一个查询来执行 。可以把一条SELECT语句返回的结果用于另一条SELECT语句的WHERE子句 。也可以使用子查询来把3个查询组合成一条语句 。
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'))
为了执行上述SELECT语句,MySQL实际上必须执行3条SELECT语句 。最里边的子查询返回订单号列表,此列表用于其外面的子查询的WHERE子句 。外面的子查询返回客户ID列表,此客户ID列表用于最外层查询的WHERE子句 。最外层查询确实返回所需的数据 。
2、作为计算字段使用子查询
使用子查询的另一方法是创建计算字段 。假如需要显示customers表中每个客户的订单总数 。订单与相应的客户ID存储在orders表中 。为了执行这个操作,遵循下面的步骤 。
(1) 从customers表中检索客户列表 。
(2) 对于检索出的每个客户,统计其在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
这条SELECT语句对customers表中每个客户返回3列 :cust_name、 cust_state和orders 。orders是一个计算字段,它是由圆括号中的子查询建立的 。该子查询对检索出的每个客户执行一次 。子查询中的WHERE子句与前面使用的WHERE子句稍有不同,因为它使用了完全限定列名 。这种类型的子查询称为相关子查询 。任何时候只要列名可能有多义性,就必须使用这种语法(表名和列名由一个句点分隔) 。例如orders和customers表中都有cust_id这个字段,这样就存在歧义 。
推荐阅读
- 安溪人生活中的茶文化
- 中国茶历史中的种植与品味
- “做得越多,死得越快”如何正确理解职场中的这个潜规则?
- 陆羽茶经中的山南茶
- 微信中的图片过期了,怎么操作才能恢复重新打开?
- 古诗的每一句叫什么 古诗中的一句
- 国际茶叶委员会统计数据 云茶产量位居第二
- 认证中心,涉茶案件价格鉴定中的难点及对策
- mysql开发理论:搞懂什么是长连接,短连接和连接池
- 一文搞定Python数据结构tuple和set