相关子查询:外查询每查询一个记录都要执行一次子查询,
如:班级表(calss)
学生表:(stu)
显示每个班有多少学生?
方法1:用相关子查询
select cid,cname ,(select count(s.name) from stu s where
s.cid=c.cid) as 班级人数 from class c;
分析:关键在于,外查询执行一次都要执行子询一次
当第一次执外查询:select cid,cname时,cid=1001,这时子查询根据where
s.cid=c.cid统计出学生表stu中班级ID号为1001的学生总数
当第二次执外查询:select cid,cname时,cid=1002,这时子查询根据where
s.cid=c.cid统计出学生表stu中班级ID号为1002的学生总数
当第三次执外查询:select cid,cname时,cid=1003,这时子查询根据where
s.cid=c.cid统计出学生表stu中班级ID号为1003的学生总数
这样就把各班的人数统计出来了。
方法2:用联接查询
select class.cid,cname,t.num 班级人数 from class join (select
cid,count(stu.sname) as num from stu group by cid )as t on
t.cid=class.cid;
得到结果:
结果得来分析:
1,用子查询(select cid,count(stu.sname) as num from stu group by
cid)统计出了学生表中各班的学生人数如下图:
这个子查询得到的表t再和上面的班级表class通过t.cid=class.cid相联接,就可以显示出班级名称和班级相应的人数。