一般情况下,我们都是直接对表进行查询,但有时候,想要的数据可能通过一次select 获取不到,需要嵌套select,这样就形成了子查询。
子查询可以位于查询语句的任意位置,主要的注意点在于用于不同的位置,和不同的关键字一起使用时,需要注意返回的列的数量和行的数量。
位于select部分
当位于select中时,一般只能返回一行一列。因为在结果集中,对应的位置只能容下一个值。
比如这里我们要查询选课表中的课程名称,除了使用join,还可以使用子查询
selectcs.*,(selectc.course_namefromcourses cwherec.course_id = cs.course_id) as course_name
fromcourse_selections cs;
结果
位于from部分
当位于from时,则没有了行数和列数的限制,等同于一张表。from部分的子查询常用在SQL优化中,用来做条件提升,以减少结果集的运算次数。这个会在后边的SQL优化中再讲。
比如这里我们要查询选课表中的课程名称,