MySQL子查询 嵌套查询
发布日期:2021-05-07 00:50:58 浏览次数:21 分类:精选文章

本文共 1243 字,大约阅读时间需要 4 分钟。

子查询:嵌套在其他查询中的查询。

有三张表分别如下:

    customers: 存储顾客信息

    orderitems:只存储订单信息,无客户信息

    orders:存储订单号和顾客id

 

 

注意:一般在子查询中,程序先运行在嵌套在最内层的语句,再运行外层。因此在写子查询语句时,可以先测试下内层的子查询语句是否输出了想要的内容,再一层层往外测试,增加子查询正确率。否则多层的嵌套使语句可读性很低。

 

子查询训练:

训练1:

查询买了商品为’TNT2’的顾客信息

子查询中涉及3张表的订单。因此分三步,1. 在orderitems里找出TNT2的订单号;2. 在orders里找出第一步找出的订单号对应的客户id;3. 在customers中找出第二步对应客户的所有信息。

1. 在orderitems里找出TNT2的订单号

SELECT order_num FROM orderitems

WHERE prod_id='TNT2';

2. 在orders里找出第一步找出的订单号对应的客户id

SELECT cust_id FROM orders

WHERE order_num

IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2');

3. 在customers中找出第二步对应客户的所有信息       

SELECT * 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操作符结合使用,也可用=><等。

 

另外,子查询还可以用于计算字段。

训练2:

如,想要查询每个客户的订单数

分步思考:1. 查询某个客户的订单数;2. 某个客户改为所有客户。

1. 查询某个客户的订单数

SELECT COUNT(*) AS orders1 FROM orders WHERE cust_id =10001;

2. 某个客户改为所有客户

SELECT cust_name, cust_state,

(SELECT COUNT(*) FROM orders WHERE orders.cust_id=customers.cust_id)

AS orders1

FROM customers

ORDER BY cust_name;

注意:当多个表都拥有同样的列名如cust_id时,一定要完全限定列名。

————————————————
版权声明:本文为CSDN博主「为什么名字可以那么长」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_38061639/article/details/82872705

上一篇:MySQL子查询嵌套查询
下一篇:C++:Static修饰变量 vs Static修饰函数

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月25日 20时45分08秒