mysql常用基础操作语法(十)~~子查询【命令行模式】
2023-09-14 09:04:42 时间
1、理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后。出现在from后的子查询结果通常是多行多列的,充当临时表;而出现在where后的子查询结果通常是单行单列,充当条件:
mysql中虽然有连接查询实现多表连接查询,但是连接查询的性能很差,因此便出现了子查询。 1、理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后。出现在from后的子查询结果通常是多行多列的,充当临时表;而出现在where后的子查询结果通常是单行单列,充当条件:![](http://img.blog.csdn.net/20160623224846281?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2、where后作为条件的子查询多与“=”、“!=”、“ ”、“ ”等比较运算符一起使用。结果虽然通常是单行单列,但是有的时候也会用单行多列,而且有的时候还会返回多行单列。如果是多行单列的情况,则多与in、any、all、exists结合使用: in和not in:![](http://img.blog.csdn.net/20160623224858217?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其中in表示包含于后边子查询结果集里的任意一个,not in表示不包含于后边结果集里的任意一个。上图子查询的结果中,返回depart_id为1、2、4,因此第一个查询就会查出emp中所有depart_id是1或2或4的,第二个就会查出既不是1也不是2也不是4的。![](http://img.blog.csdn.net/20160623224910407?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
=any的用法和in的效果是一样的; any是说要大于子查询结果集里的任意一个就可以,简单理解就是只要大于结果集中最小的那个就可以; any就是要小于子查询结果集里任意一个就可以,简单理解就是只要小于最大的一个就可以。因此这里 any是只要大于1就行,而 any则只要小于4就行。![](http://img.blog.csdn.net/20160623224922999?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
all就是说要大于子查询结果集里所有的,简单理解就是要比最大的那个还大; all就是要小于结果集里所有的,简单理解就是要比最小的还小。因此上边的第一个查询就是要大于4,第二个就是要小于1。 exists:![](http://img.blog.csdn.net/20160623224935593?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
exists和not exists只关心后边的子查询是否有结果,而不关心子查询的结果是什么;对于exists,如果后边的子查询有结果,那么它的值就是true,反之如果没有查到结果,则为false,而not exists正好和这个情况相反,有值为false,无值为true。当他们的值为true时,前边查询到的结果成立,会被加入到主查询的结果集,否则不会被加入主查询的结果集。 在上便的查询中,查询语句会先从emp中查询一条数据,然后拿这条数据的depart_id和company中的depart_id比较,当存在两个id相同的数据时,就会有结果返回,然后最终返回6条数据,而第二个查询一样的道理,当不存在两个id相同的数据时,主查询才有结果返回,只有一条数据。
涂宗勋 认真生活,快乐工作,保持理想!https://blog.csdn.net/tuzongxun
mysql中虽然有连接查询实现多表连接查询,但是连接查询的性能很差,因此便出现了子查询。 1、理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后。出现在from后的子查询结果通常是多行多列的,充当临时表;而出现在where后的子查询结果通常是单行单列,充当条件:
2、where后作为条件的子查询多与“=”、“!=”、“ ”、“ ”等比较运算符一起使用。结果虽然通常是单行单列,但是有的时候也会用单行多列,而且有的时候还会返回多行单列。如果是多行单列的情况,则多与in、any、all、exists结合使用: in和not in:
其中in表示包含于后边子查询结果集里的任意一个,not in表示不包含于后边结果集里的任意一个。上图子查询的结果中,返回depart_id为1、2、4,因此第一个查询就会查出emp中所有depart_id是1或2或4的,第二个就会查出既不是1也不是2也不是4的。
=any的用法和in的效果是一样的; any是说要大于子查询结果集里的任意一个就可以,简单理解就是只要大于结果集中最小的那个就可以; any就是要小于子查询结果集里任意一个就可以,简单理解就是只要小于最大的一个就可以。因此这里 any是只要大于1就行,而 any则只要小于4就行。
all就是说要大于子查询结果集里所有的,简单理解就是要比最大的那个还大; all就是要小于结果集里所有的,简单理解就是要比最小的还小。因此上边的第一个查询就是要大于4,第二个就是要小于1。 exists:
exists和not exists只关心后边的子查询是否有结果,而不关心子查询的结果是什么;对于exists,如果后边的子查询有结果,那么它的值就是true,反之如果没有查到结果,则为false,而not exists正好和这个情况相反,有值为false,无值为true。当他们的值为true时,前边查询到的结果成立,会被加入到主查询的结果集,否则不会被加入主查询的结果集。 在上便的查询中,查询语句会先从emp中查询一条数据,然后拿这条数据的depart_id和company中的depart_id比较,当存在两个id相同的数据时,就会有结果返回,然后最终返回6条数据,而第二个查询一样的道理,当不存在两个id相同的数据时,主查询才有结果返回,只有一条数据。
涂宗勋 认真生活,快乐工作,保持理想!https://blog.csdn.net/tuzongxun
相关文章
- Mysql命令行添加用户并且给予远程访问服务器的权限
- ASP.NET Core EF Core+Mysql分层开发项目实战
- 【MySQL】innobackupex 长时间hang
- 第二百九十节,MySQL数据库-MySQL命令行导出导入数据库,数据库备份还原
- MySQL优化的一些基础
- Mysql Explain详解
- [MySQL] 原生全文检索 fulltext 的简单应用
- 解决MySQL Server Logs不能正常查看的问题
- Mysql纯命令行添加用户
- mysql常用基础操作语法(十一)~~字符串函数【命令行模式】
- mysql常用基础操作语法(八)~~多表查询合并结果和内连接查询【命令行模式】
- mysql常用基础操作语法(六)--对数据排序和限制结果数量的条件查询【命令行模式】
- mysql常用基础操作语法(五)--对数据的简单条件查询【命令行模式】
- mysql常用基础操作语法(四)--对数据的简单无条件查询及库和表查询【命令行模式】
- mysql常用基础操作语法(二)~~对表的增删改操作【命令行模式】
- MySQL复习资料(八)——MySQL-事务
- MySQL数据库普通索引
- 云图说:云数据库 RDS for MySQL一键开通读写分离,轻松应对业务高峰期
- MySQL用命令行复制表的方法
- mysql 取消命令行继续编辑
- 【云原生 | Kubernetes 系列】结合pv/pvc Mysql 主从架构
- MySQL的左连接查询,只取出最大的一条数据
- mysql case when
- mysql命令行中包含table的命令
- MySQL---存储过程复习
- MySQL常用运算符详解
- MySQL-第十三章-系统优化