MySQL之子查询

2018-06-04  本文已影响12人  wenmingxing

本文主要介绍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、例题

牛客网SQL子查询例题1

【参考】
[1] 《MySQL必知必会》

上一篇 下一篇

猜你喜欢

热点阅读