1、利用子查询进行过滤
eg:假如需要列出订购物品TNT2的所有客户,具体步骤:
检索包含物品TNT2的所有订单编号
检索具有前一步骤列出的订单编号的所有客户的ID
检索前一步骤返回的所有客户ID的客户信息
上述每个步骤都可以单独作为一个查询来执行,可以把一条SELECT语句返回的结果用于另一条SELECT语句的WHERE语句。也可以使用子查询把3个查询组合成一条语句。
select order_num FROM orderitems WHERE prod_id=‘TNT2';
输出结果为:
order_num:20005,20007
下一步,查询具有订单20005和20007的客户ID。
SELECT cust_id from orders where order_num IN(20005,20007);
输出结果:
cust_id:10001,10004
现在,把第一个查询(返回订单号的那一个)变为子查询组合两个查询。请看:
SELECT cust_id from orders where order_num IN(select order_num FROM orderitems WHERE prod_id=‘TNT2');
输出结果为:
cust_id:10001,10004
分析:在SELECT语句中,子查询总是从内向外处理。在处理上面的语句时,mysql
实际执行了两个操作。
现在得到了订购物品TNT2的所有客户ID,下一步是检索这些客户ID的客户信息,检索两列的SQL语句为:
SELECT cust_name ,cust_contact from customers where cust_Id in(10001,10004);
上面,可以把其中的where子句转换为子查询而不是硬编码这些客户ID。
SELECT cust_name ,cust_contact from customers where cust_Id
IN(SELECT cust_id from orders where order_num IN(select order_num
FROM orderitems WHERE prod_id=‘TNT2'));
分析:为了执行上面的select 语句,mysql实际上必须执行3条SELECT语句。最里边的子查询返回订单号列表,此列表用于其外面的子查询的WHERE子句。外面的子查询返回客户ID列表,此客户ID列表用于最外层查询的WHERE子句。最外层查询确实返回所需的数据。
不过,在实际使用时由于性能的限制,不能嵌套太多的子查询。
注意:列必须匹配。在WHERE子句中使用子查询,应该保证SELECT语句具有与WHERE子句中相同数目的列,通常,子查询将返回单个列并且与单个列匹配,但如果需要也可以使用多个列。虽然子查询一般与IN操作符结合使用,但也可以用于测试等于(=)、不等于(<>)等。
2、作为计算字段使用子查询
使用子查询的另一种方法就是创建计算字段。假如需要显示customers表中每个客户的订单总数,为了执行这个操作,遵循下面的步骤:
从customers表中检索客户列表
对于检索出的每个客户,统计其在orders表中的订单数目。
例如:下面的代码对客户10001的订单进行计数。
SELECT COUNT(*) AS orders FROM orders WHERE cust_id=10001;
为了对每个客户执行COUNT(*)计算,应该将COUNT(*)作为一个子查询,请看下面:
SELECT cust_name,cust_state,
(SELECT COUNT(*) FROM orders
WHERE orders.cust_id=customers.cust_id) AS orders
from customers
order by cust_name;
分析:这条SELECT 语句对customers表中的每个客户返回3列: cust_name,cust_state,orders。orders是一个计算字段,它是由圆括号的子查询建立,该子查询对检索出的每个客户执行一次。在此例子汇总,该子查询执行了5次,因此检索出了5个客户。
小结:子查询最常见的使用是在WHERE子句的IN操作符中,以及用来填充计算列。

转载于:https://www.cnblogs.com/by170628/p/7954724.html

MYSQL 学习笔记记录整理之三:子查询相关推荐

  1. MySQL 学习笔记(16)— 子查询(单行单列、一行多列、多行多列、 ALL、ANY、SOME 运算符、EXISTS 操作符)

    1. 子查询概念 子查询是指嵌套在其他语句(SELECT . INSERT . UPDATE . DELETE 等)中的 SELECT 语句:子查询也称为内查询( inner query )或者嵌套查 ...

  2. MySQL学习笔记06【多表查询、子查询、多表查询练习】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  3. MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  4. 小白终是踏上了这条不归路----小文的mysql学习笔记(8)----分页查询

    ** 小白终是踏上了这条不归路----小文的mysql学习笔记(1) 小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询 小白终是踏上了这条不归路----小文的mysql学 ...

  5. 小白终是踏上了这条不归路----小文的mysql学习笔记(6)----连接查询-----等值连接、非等值连接、自链接、外连接、交叉连接

    ** 小白终是踏上了这条不归路----小文的mysql学习笔记(1) 小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询 小白终是踏上了这条不归路----小文的mysql学 ...

  6. MySQL 学习笔记(4)— 组合查询、子查询、插入数据、更新/删除表数据、增加/删除表中的列以及重命名表

    1. 组合查询 1.表的加减法 表的加法,即求 product 和 product2 的并集,UNION 运算会除去重复的记录 SELECT product_id, product_name FROM ...

  7. Mysql学习笔记(6)分页查询、联合查询、DML语言

    分页查询 limit SELECT * FROM employees LIMIT 0,5; # 从0开始,可省略起始索引 SELECT * FROM employees LIMIT 5 联合查询 插入 ...

  8. MySQL学习笔记(6)—— 慢查询日志和索引

    文章目录 一. 慢查询日志 1. MySQL的各种日志 2. 认识慢查询日志 3. 开启慢查询日志 4. 示例 二.查询分析器EXPLAIN 1. explain简介 2. explain的使用 3. ...

  9. mysql学习(5) - 使用子查询

    mysql4.1之后,可以使用子查询进行数据的查询 成为子句的查询条件,只能是单列进行查询 在实际使用的时候,最好不要嵌套太多子查询,会降低性能 子查询通常使用在where语句的in条件中,或者查询列 ...

最新文章

  1. web项目开启日志打印
  2. js计算两个日期的时间差
  3. mysql 视图 字符集_MySQL创建子视图并查看的时候,字符集报错问题
  4. 详解Eureka服务注册与发现和Ribbon负载均衡【纯理论实战】
  5. Scala教程之:可扩展的scala
  6. oracle ebs po_header_all含税单价,Oracle EBS-追踪PO全过程
  7. Linux网络编程——tcp并发服务器(epoll实现)
  8. Spark分布式集群的搭建和运行
  9. C++学习之路 | PTA乙级—— 1047 编程团体赛 (20 分)(精简)
  10. 实战_02_Spring SpringMVC 整合Mybaits
  11. SilverLight是什么?(来自Csdn)
  12. apt-get常见错误
  13. Python内置函数ord()与chr()
  14. 存储设备映射Linux服务器,青云oss对象存储映射至linux服务器
  15. hadoop完全分布式集群下安装sqoop
  16. Base64,DES,RSA,SHA1,MD5 笔记
  17. asp.net有效使用缓存(转)
  18. winform窗体最大化、最小化、还原
  19. 快速彻底删除页眉或页脚横线
  20. linux rhel dns配置,RedHat Linux DNS配置指南

热门文章

  1. GitHub标星3.6k | 给AI一张高清照片,分分钟还你3D人体模型
  2. 面向小姐姐的编程——JAVA面向对象之继承(二)
  3. rbf核函数_高斯过程回归础(使用GPy和模拟函数数据集)
  4. mysql 的client_mysql(一)-客户端Client相关
  5. js如何提高for循环的效率_让你瞬间提高工作效率的常用js函数汇总
  6. python多进程存储数据_python – 多进程还是多线程? – 并行化数百万次迭代的简单计算并将结果存储在单个数据结构中...
  7. 前端基础之CSS(总结)
  8. 模板方法设计模式(未完待续)
  9. LightOJ 1074 Extended Traffic(spfa+dfs标记负环上的点)
  10. 内联元素,取消间隙和默认效果