本文主要介绍MySQL中的子查询,及如何使用它。
I、利用子查询进行过滤
假设我们有三个tables:
1、orders表存储订单号,客户ID,订单日期;
2、各个订单的物品存储在orderitems表中;
3、用户信息存储在customers表中;
现在我们要实现一个列出订购物品TNT2的所有用户信息。
1、首先我们需要从orderitems表中得到TNT2的订单编号order_num:
> SELECT order_num FROM orderitems WHERE prod_id = 'TNT2';
2、再从order中查找这些订单的客户ID(cust_id):
> SELECT cust_id FROM orders WHERE order_num IN (20005, 20007);
3、最后在表customers中得到这些客户的信息:
> SELECT cust_name, cust_contact FROM customers WHERE cust_id IN (10001, 10004);
而如果应用子查询,可以将以上三个步骤缩减为一条语句:
> 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'));
可见,子查询一般使用WHERE
子句的IN
操作符,完成查询。
II、子查询作为计算字段
使用子查询的另一种方法是创建计算字段,假如,我们需要显示customers表中每个客户的订单总数。为了完成这个操作,需要进行下面的步骤:
1、从customers表中检索客户列表;
2、对于检索出的每个客户,统计出其在orders表中的订单数目。
可以采用子查询完成这个工作:
> SELECT cust_name, cust_state,
(SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS nums FROM customers;
上面的语句中所生成的nums列即为子查询所创建的计算字段,输出结果如下:
III、例题
【参考】
[1] 《MySQL必知必会》
网友评论