之前在学SQL Server时没有对sql子查询有个详细的了解,现对子查询有了进一步学习,总结如下:
根据第二个子语句的返回值分类,MySql一共可以分为4种(单一值、一列、一行、表(即多行多列))
1、子查询返回单一值
示例表的结构如下(下面都是同一张表):
查询条件为:查询上课days最多的教师的姓名、性别。SQL语句即结果如下:
2、子查询返回一列
查询条件为:查询教过php0228班的教师的信息。SQL语句即结果如下:
其中与in类似的,还有any、all、some,any代表任何一个,all代表所有,some和any同义词
=any (集合)等于集合中任何一个即可,等同于in
!=all (集合)不等于集合中的所有元素,等同于not in
注:!=any没有啥意义(不等同于not in)
3、子查询返回一行
查询条件为:查询与李白教过php0115班的性别和班级相同的教师的信息(有点绕,直接看代码吧~~意思明白就行了~~)。SQL语句即结果如下:
4、子查询返回一个表
通常用在from形子查询中使用
select * from (table) where cond;
外部查询所使用的列名,是由子查询指定。
5、Exists
Exists(subquery)
判断依据:
如果子查询的可以返回数据,则认为Exists表达式返回真,否则,返回假。
示例:
两个表:
(1)子查询:
(2)其实该查询也可以这样:select * from teacher_class where id in(select t_id from teacher) (稍微可以理解)
比较:
Exists:先获得每一条teacher_class的数据,然后获得id字段,去teacher表内查找对应值,找到,说明符合条件的
in:先获得所有的id的可能性。再在检索teacher_class数据时,判断当前的id是否在id集合内。