mysql学习九之子查询包含子查询的分类,标量子查询,列子查询,行子查询,表子查询以及exists子查询
一、什么是子查询
首先,有很多问题无法通过一次性查询就能将结果查询出来
例如:要查询代课天数最多的老师信息
我们的查询步骤是:
- 先找出代课天数最多的天数,
- 然后将这个天数保作为一个变量保存起来,
- 再来一个查询老师信息的语句,并将保存起来的天数作为查询条件。
这就是子查询存在的意义。也就是说一个查询问题中包含两个查询语句。
mysql的子查询二、子查询分类
子查询可以分为两大类:
- 按子查询的位置分类
- 按子查询的返回形式分类
首先先看子查询的返回形式:
子查询返回形式有:单一值(标量),一列,多列(行),多行多列(表)。
子查询的返回类型按出现的位置可分为:where型,where后;from型,from后;exists型。
1、标量子查询
标量子查询的使用2、列子查询
列子查询和标量子查询的步骤几乎相同,不同点是列子查询返回的不是一个值,而是一列(注意,就是一列,即多个行的一列值)也叫做一个集合。然后再从这个集合中查找信息。
这里面牵涉一个问题,既然列子查询返回的不是一个值,而是一个集合,那么就要用到集合的运算符。常用的集合运算符有:
in ,not in ,some ,not some ,any ,all,!=all,
- in :表示在集合中。
- not in :表示不在集合中。且等同于!=all.(不属于集合中的任何内容)。
- some 等同于in
- any :集合中的任何一个。
- != any :表示只要与集合中的任何一个不相等即可。
- all :集合中的所有元素。
- !=all: 表示不属于集合中的任何内容。
总结:any 、some和all与in的区别就是前者可以使用除 =,!=,之外的运算符,而in只有in,和not in 。
3、行子查询
行子查询意思是:返回一行,所谓行,至少有两列组合在一起,并且只有一行,如果超过了两行就是表。因此还需有个关键词限制。即:limit 1;
此外返回了一行,需要接收,需要判断。那么就需要一个括弧,这个括弧包含返回行里的字段。然后用运算符判断。作为条件语句。
即:
阴影处的括弧,就是子查询中返回的行。
4、表子查询
表子查询是用在from子句内,from子句内要求使用一个表,而能是一个结果。可以给这个查询结果起名,别名。用as语法。例如:
利用as temp,让子查询得到的表称作temp表。然后外部查询在通过这个新生成的表查询所要的值。注意:外部查询所用的列明是子查询指定的。例如:子查询将t_name改为teacher。外部查询要查询t_name就要不能写这个,而应该写teacher。因为外部查询的对象是子查询得到的新表。
5、exists子查询
Exists(subquery)判断依据:如果子查询可以返回数据,则认为exists表达式返回真。否则,返回假。
由上图可见,Exists子查询可以通过其他查询代替。两种方法的结果相同,但是两者的解决思路是不同的。
- MySQL中列子查询与行子查询操作的学习教程
- MySQL中列子查询与行子查询操作的学习教程
- MySQL中列子查询与行子查询操作的学习教程
- MySQL无限分类的数据表设计以及各种查询
- MySQL 子查询-分类、标量、列
- MySQL中表子查询与关联子查询的基础学习教程
- MySQL中表子查询与关联子查询的基础学习教程
- MySQL无限分类的数据表设计以及各种查询
- mysql学习笔记-创建用户以及登录,基本信息查询
- MySQL的子查询及相关优化学习教程
- MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法
- 通达OA-今日学习:登陆后的界面出现英文错误提示,包含mysql等字符
- mysql学习笔记之连接查询与子查询
- Android基于XMPP Smack Openfire下学习开发IM(三)会议室创建、加入以及查询会议室中所有成员等
- MYSQL 查询包含某个数据表的所有存储过程
- 学习笔记_用hibernateQBC动态查询+jsp的jstl标签库实现的动态查询以及分页特效
- MYSQL学习笔记 (六)explain分析查询
- MySQL学习笔记(10)之select查询语句
- MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法find_in_set
- 关于mysql 简单的查询语句 以及常用函数的 总结