博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql常用基础操作语法(十)~~子查询【命令行模式】
阅读量:6170 次
发布时间:2019-06-21

本文共 1002 字,大约阅读时间需要 3 分钟。

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:
=any的用法和in的效果是一样的;>any是说要大于子查询结果集里的任意一个就可以,简单理解就是只要大于结果集中最小的那个就可以;<any就是要小于子查询结果集里任意一个就可以,简单理解就是只要小于最大的一个就可以。因此这里>any是只要大于1就行,而<any则只要小于4就行。
all:
>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相同的数据时,主查询才有结果返回,只有一条数据。
你可能感兴趣的文章
利用mysqld_multi配置单机多实例
查看>>
文件下载,中文文件名处理
查看>>
完美解读Linux中文件系统的目录结构
查看>>
我的友情链接
查看>>
服务器和阵列
查看>>
js页面跳转的问题(跳转到父页面,跳转到最外层页面)
查看>>
ShaderModel3里面的条件判断
查看>>
Oracle_071_lesson_p21
查看>>
使用JavaScript生成二维码教程-附qrcodejs中文文档
查看>>
ugui使用代码动态添加Button.OnClick()事件
查看>>
通配符,man.find命令
查看>>
mybatis中调用输出参数为游标的存储过程,及存储函数的调用
查看>>
RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序
查看>>
【MyBatis框架】查询缓存-二级缓存-整合ehcache
查看>>
使用C#编写自己的代码生成器,附代码讲解(一)
查看>>
我的友情链接
查看>>
jquery 获取窗口宽高度
查看>>
s5pv210 uboot-2012-10移植(六) 之支持NandFlash
查看>>
Activity切换淡入淡出效果
查看>>
安卓开发中碰到的一些常见问题
查看>>