mysql常用基础操作语法(十)~~子查询【命令行模式】
来源:互联网 发布:2017全国最新人口数据 编辑:程序博客网 时间:2024/06/11 10:32
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相同的数据时,主查询才有结果返回,只有一条数据。
0 0
- mysql常用基础操作语法(十)~~子查询【命令行模式】
- mysql常用基础操作语法(五)--对数据的简单条件查询【命令行模式】
- mysql常用基础操作语法(七)--统计函数和分组查询【命令行模式】
- mysql常用基础操作语法(九)~~外连接查询【命令行模式】
- mysql常用基础操作语法(四)--对数据的简单无条件查询及库和表查询【命令行模式】
- mysql常用基础操作语法(八)~~多表查询合并结果和内连接查询【命令行模式】
- mysql常用基础操作语法(六)--对数据排序和限制结果数量的条件查询【命令行模式】
- mysql常用基础操作语法(十二)~~常用数值函数【命令行模式】
- mysql常用基础操作语法(一)~~对库的操作【命令行模式】
- mysql常用基础操作语法(二)~~对表的增删改操作【命令行模式】
- mysql常用基础操作语法(三)~~对数据的增删改操作【命令行模式】
- mysql常用基础操作语法(十一)~~字符串函数【命令行模式】
- mysql基础,命令行语法
- mysql 命令行常用操作
- 常用mysql命令行操作
- Mysql命令行常用操作
- Mysql命令行常用操作
- Mysql命令行常用操作
- quartz任务并行
- RedisTemplate API
- REST服务开发实战
- 答疑java初学者常见问题
- JavaMaill:使用MIME协议创建内含图片的复杂邮件
- mysql常用基础操作语法(十)~~子查询【命令行模式】
- python3.5简单爬虫爬取百度百科(参考imooc实战)
- bootstrap modal弹出框的垂直居中
- PHP的魔术方法及异常
- JavaMail入门:创建纯文本、HTML格式的邮件
- AngularJS-MVC(1-1)
- 我写哒有关photoshop曲线工具的攻略,跟编程没啥关系就不发了发下我新浪博客的链接
- cvSetImageROI 感兴趣区域选择
- ubuntu14.04编译PTAM