开发工具与关键技术: Oracle sql*plus PLSQL Developer
作者:邓婵
撰写时间:2019年 4月 7日
当你所需要查询的数据一个表无法满足你需要查询的时候,我们需要通过连接条件把多表进行连接起来查询,如下就是我所需要用到的表:
就像如下例子,如果用单表查询是查询不出来的,所以我们需要表与表之间的连接查询所需要的信息,而表之间的连接也是需要连接条件的,否则就会产生笛卡尔集使所有表中的所有行互相连接。多表连接查询时, 若两个表有同名的列, 必须使用表的别名对列名进行引用, 否则出错。
下面例子中教师表当中的tno连接课程表中的tno,然后成绩表中的cno 连接课程表的cno,这样就可以把需要的查询出来
例1:查询选修某课程的同学人数多于5人的教师姓名。
方法一:
select b.Cname,count(c.Sno),a.Tname from teacher a left join Course b on a.tno = b.tno
left join Scorec on b.cno = c.cno
group by b.Cname,a.Tname having count(c.Sno)>5
该方法等同于
select b.Cname,count(c.Sno),a.Tname from teacher a , Course b ,Score c
where a.tno = b.tno(+) and b.cno = c.cno(+)
group by b.Cname,a.Tname having count(c.Sno)>5
结果如下所示:
方法二:
我们也可以通过表之间的关联,再根据子查询查询所需要的信息
select tname from teacher join course on teacher.tno=course.tno
where cno in (select cno from score group by cno having count(*)>5)
结果如下所示:
例2:查询学过“3-245”并且也学过编号“3-105”课程的同学的学号、姓名
select a.*from score b
join score c on b.sno = c.sno
join student a on a.sno = b.sno
where b.cno=‘3-245’ and c.cno=‘3-245’ and a.sno = b.sno
结果如下所示: