MySQL-14使用子查询-必知必会

之前的学习的所有SELECT语句都是简单查询,只从单个数据库表中检索数据的单条语句,SQL还允许建立子查询:嵌套在其他查询中的查询

  • 举例:表orderitems只存储客户的ID和物品信息。实际的客户信息存储在customers表中

    ​ 现在需要查询订购物品TNT2的所有客户

    1、在orderitems表中检索出含物品TNT2的所有订单的编号

    2、检索具有步骤1的订单编号的所有客户的ID

    3、检索步骤2返回的所有客户ID的客户信息

1、对prod_id为TNT2的所有订单,检索其order_num列,得出相应的订单号为200005和200007
SELECT order_num FROM orderitems WHERE prod_id = 'TNT2';
2、查询具有订单200005和200007两个订单的ID为10001和10004
SELECT cust_id FROM orders WHERE order_num IN (200005,200007);
3、检索这些ID的客户信息
SELECT cust_name,cust_contact FROM customers WHERE cust_id IN (10001,10004);

​ 把第一个查询变成子查询,组合以上两个查询,在SELECT语句中,子查询从内向外处理

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

​ 把以上组合变为子查询,和第三次进行组合

SELECT cust_name,cust_contact FROM customers WHERE
	(SELECT cust_id FROM orders WHERE order_num IN 
		(SELECT order_num FROM orderitems WHERE prod_id = 'TNT2'));
  • 使用相关子查询时注意使用完全限定名,在不同表中区分
例:显示costomers表中每个客户的订单总数,订单和相应的客户ID存储在orders表中
1、从customers表中检索客户列表
2、对检索出的每个用户,使用COUNT()统计在orders表中的订单数目
SELECT cust_name,cust_status,(SELECT COUNT(*) FROM orders WHERE orders.id = customers.id) AS orders
	FROM customers ORDER BY cust_name;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值