ORACLE SQL 多表查询

开发工具与关键技术: 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

结果如下所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值