出现在其他语句中的SELETE语句,称为子查询或者内查询,外部的查询称为外查询或者主查询。
子查询的种类有四种,而咱们想学习子查询,首先就得对四种查询有所认知,在此发表个人依据平时的使用时的理解。
1.select子查询(外语句先执行,后执行子语句)
案例:
在select后加‘子’的部分,将另一张表的内容当作一列,变成一个列标进行查询,个人用的较少。可见图中被标记的部分就是‘子’,获取老师的名字,好处在于此处并未进行常规的关联查询,而是直接加入了一列name。
2.where子查询(先执行子查询,再执行外查询)
where子查询和in连用,常用于筛选,子部分放在in之后
图一是子的部分,获取学过语文的学生的Sid,此后执行外查询,where后进行一个判断筛选,判断所有学生中,Sid和子表中的Sid相同的学生。同理,如果像获得没有学习语文的学生,只需将in 变为not in即可
案例:
3.from子查询(先执行子查询,再执行外查询)
from子查询子的部分直接当成一张表写在from后面
图1获取到学语文的学生的学号和成绩,图2执行外查询,将子查询当成一张表获取学号,不知道是否有人注意到跟之前查询不一样,我给表名命名了a,因为其实from查询还有一些条件才能使用
1.子表部分必须命名才可以使用
2.当子表有关联查询时,获取的结果一定不能有重复列名,否则无法执行外查询
案例:
4.exist子查询(先执行外语句,再执行子查询)
exist你可以理解为in,同样是作为筛选,图1时获得课程有01的学生,图2执行外查询后,判断输出,符合子表中的条件的才输出,值得一提的时子表中必须有子和外的链接部分,如同图1中的and后部分,通过主键进行关联
案例: