【MySQL必知必会(十一)】【使用子查询】

上一篇:【MySQL必知必会(十)】【分组数据】

+++++++++++++开始线++++++++++++++++

一、 子查询

查询

任何SQL语句都是查询。但此术语一般指SELECT语句

二、 利用子查询进行过滤

列出订购物品TNT2的所有客户
1.检索包含物品TNT2的所有订单的编号
2.检索具有前一步列出的订单编号的所有客户的ID
3.检索前一步返回的所有客户ID的客户信息

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

在这里插入图片描述

现在得到订购TNT2的所有客户的ID,下一步是检索这些客户ID的客户信息

mysql> SELECT cust_name, cust_contact
    -> FROM customers
    -> WHERE cust_id IN (10001,10004);

在这里插入图片描述

列匹配

在WHERE子句中使用子查询,应该保证SELECT语句具有与WHERE子句中相同数目的列。通常,子查询将返回单个列并且与单个列匹配,如果需要可以使用多个列。

三、 作为计算字段使用子查询

对客户10001的订单进行计数

mysql> SELECT COUNT(*) AS orders
    -> FROM orders
    -> WHERE cust_id = 10001;

在这里插入图片描述

对每个客户执行COUNT(*)计算

mysql> SELECT cust_name,
    -> cust_state,
    -> (SELECT COUNT(*)
    -> FROM orders
    -> WHERE orders.cust_id = customers.cust_id) AS orders
    -> FROM customers
    -> ORDER BY cust_name;

在这里插入图片描述

+++++++++++++结束线++++++++++++++++

下一篇:【MySQL必知必会(十二)】【联结表】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值