ORACLE SQL 表的内关联子查询

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

表的内关联子查询:子查询可以用主查询里面定义的表进行关联实现查询,这样的查询我们把它叫为表的内关联子查询
下图是一个表的内关联子查询的例子:
ORACLE SQL 表的内关联子查询_第1张图片
如图所示,我们在Where条件中写入子查询,然后再调用主查询定义的表a来关联子查询中定义的表b从而使两张表关联上,关联上后要查询出工资相同的员工所以我们使表a的工资等于表b的工资,仅仅写这一个条件还是不可以的,所以还在后面加了一个ID不相等,这样的话就不会使表a中的名字等于表b中的名字了,这里为什么不用表a的name不等于表b的列呢,因为名字是会有重复的,所有我们用表的ID来进行不相等判断。
下面是查询出来的结果:
ORACLE SQL 表的内关联子查询_第2张图片
表的内关联子查询我们平时用的也不算多,不过有时查询或修改一些特定的数据还是会用到的。
另外我还有一个也是关于表的内关联子查询的例子跟大家分享一下,这是一个关于修改表数据的
下面是一个修改数据时的题目:
–把“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课程号进行连接
最后查询出结果
现在我们拿修改前的数据跟修改后的数据对比一下
修改前:
ORACLE SQL 表的内关联子查询_第3张图片
修改后:
ORACLE SQL 表的内关联子查询_第4张图片

你可能感兴趣的:(Oracle)