MySQL使用子查询

说明:本文所使用的数据库样例表创建脚本下载地址:https://github.com/zhaoxd298/mysql_scripts

一、利用子查询进行过滤

  在数据库操作中可能会经常碰到需要的数据需要通过查询多个关系表才能得到,即可能某条查询需要用到其他查询语句的结果,请分析下面两个例子:

SELECT order_num
FROM orderitems
WHERE prod_id = 'TNT2';

执行结果:
这里写图片描述

SELECT cust_id
FROM orders
WHERE order_num IN (20005, 20007);

执行结果:
这里写图片描述

  第二条查询中用到了第一条的结果。如果是在应用程序中的话需要先保存第一次的查询结果,然后再根据保存的结果查询第二次,这无疑增加了应用程序的难度,MySQL支持将第一条查询语句作为第二条的子查询语句,组合后的查询语句如下:

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

执行结果:
这里写图片描述

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

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

  下面例子中在计算字段使用子查询:

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

执行结果:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值