ORACLE SQL 表的内关联子查询

本文由刘俊杰撰写,介绍了Oracle SQL中的内关联子查询,通过实例展示了如何在Where条件中使用子查询与主查询关联,以查询或修改特定数据。文章以查询工资相同但ID不同的员工和更新‘谌燕’老师所教课程成绩为例,详细解释了子查询与主查询的关联方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发工具与关键技术:Oracle sql*plus PLSQL Developer
作者:刘俊杰
撰写时间:2019年03月27日

表的内关联子查询:子查询可以用主查询里面定义的表进行关联实现查询,这样的查询我们把它叫为表的内关联子查询
下图是一个表的内关联子查询的例子:
在这里插入图片描述
如图所示,我们在Where条件中写入子查询,然后再调用主查询定义的表a来关联子查询中定义的表b从而使两张表关联上,关联上后要查询出工资相同的员工所以我们使表a的工资等于表b的工资,仅仅写这一个条件还是不可以的,所以还在后面加了一个ID不相等,这样的话就不会使表a中的名字等于表b中的名字了,这里为什么不用表a的name不等于表b的列呢,因为名字是会有重复的,所有我们用表的ID来进行不相等判断。
下面是查询出来的结果:
在这里插入图片描述
表的内关联子查询我们平时用的也不算多,不过有时查询或修改一些特定的数据还是会用到的。
另外我还有一个也是关于表的内关联子查询的例子跟大家分享一下,这是一个关于修改表数据的
下面是一个修改数据时的题目:
–把“SC1”表中“谌燕”老师教的课的成绩都更改为此课程的平均成绩;

update sc1 c set score = (
Select avg(score) from sc1 c1
            where  c.cno= c1.cno
            and c1.cno in(
            select cno from course1 a, teacher1 b
            where a.tno = b.tno
            and tname = '谌燕')
            group by c1.cno)
where cno in(
select cno from course1 a, teacher1 b
where a.tno = b.tno
and tname = '谌燕')

如题需要查询出sc1表中的“谌燕”老师所教课的平均成绩,再把该课程的成绩修改为该平均成绩,首先我们先查询出“谌燕”所教的课程,用avg函数来根据课程计算出该课程的平均成绩,再用update修改sc1表中的数据,因为是修改所以score成绩后面只能用等于来连接,但是查询出来的数据里面包含多个条件的话是修改不了的,这时我们就要用修改表后面的c就要跟子查询中查询出来的数据进行关联了,把c表中的cno课程号跟c1表中的cno课程号进行连接
最后查询出结果
现在我们拿修改前的数据跟修改后的数据对比一下
修改前:
在这里插入图片描述
修改后:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值