前言
栗子中的学生表和班级表仍然是之前使用过的,可以再前面的文章中找到。
子查询
子查询也称内部查询,嵌套查询。指将一个 SELECT 查询(子查询)的结果作为另一个 SQL 语句(主查询)的数据来源或者判断条件。
作用一般有两个,分步骤和进行效率的优化。
在开始介绍各类别子查询之前,先举个栗子:假设有一个多表连接问题,查询学生王五的班主任姓名。
select t1.name,t2.ht
from student t1 left join class t2 on t1.classid=t2.classid
WHERE t1.name='王五'
结果为:
name ht
王五 章七
1、select 子查询
注意:把查询当作一个结果值来处理,并且这个结果必须是另一张表的主键。
举个栗子:还是查询学生王五的班主任姓名
子查询分步:先外层找出王五的班级id,即找到t1.classid,再嵌套select找出该班级的班主任姓名。
select t1.name, (select ht from class t2 where t2.classid = t1.classid) 班主任
from student t1
where name='王五'
2、where 子查询
注意:把查询结果当作条件处理。
子查询分步:先内层嵌套找出王五的班级id,即找到t1.classid作为条件,再外层select找出班级号为1的班主任姓名。
select t2.ht
from class t2
where t2.classid = (select t1.classid from student t1 where name='王五')
3、from 子查询
注意:将查询当作一张表,适用于多表。
子查询分步:先内层嵌套找出王五的班级id,即找到t1.classid作为表1,联查表2班级表。
select t2.ht
from(select t1.classid from student t1 where name='王五')t1,class t2
where t1.classid = t2.classid