MySQL子查询 嵌套查询

MySQL子查询 嵌套查询子查询 嵌套在其他查询中的查询 有三张表分别如下 customers 存储顾客信息 orderitems 只存储订单信息 无客户信息 orders 存储订单号和顾客 id nbsp nbsp 注意 一般在子查询中 程序先运行在嵌套在最内层的语句 再运行外层 因此在写子查询语句时 可以先测试下内层的子查询语句是否输出了想要的内容 再一层层往外测试 增加子查询正确率 否则多层的嵌套使语句可读性

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

有三张表分别如下:

  1. customers: 存储顾客信息

MySQL子查询 嵌套查询

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

MySQL子查询 嵌套查询

  1. orders:存储订单号和顾客id

 MySQL子查询 嵌套查询

 

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

 

子查询训练

训练1

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

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

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

SELECT order_num FROM orderitems

WHERE prod_id=’TNT2′;

MySQL子查询 嵌套查询

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

SELECT cust_id FROM orders

WHERE order_num

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

MySQL子查询 嵌套查询

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′));

MySQL子查询 嵌套查询

这样就得到结果啦~

子查询一般与IN操作符结合使用,也可用=>
<等。< p="">

 

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

训练2

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

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

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

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

MySQL子查询 嵌套查询

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;

MySQL子查询 嵌套查询

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176443.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午9:55
下一篇 2026年3月26日 下午9:55


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号