6-oracle_表关联

来源:这里教程网 时间:2026-03-03 13:10:46 作者:

表关联是对2个表的列合并,怎么合并呢,这里需要一个连接信息,也就是关联字段,比如一个学生表里有学号+班级+出生日期,另一个表里有学号+科目+成绩,哪如果需要得到学号+班级+科目+成绩这样的信息,这就需要表关联,关联的字段用什么呢,只能用这2个表共同相关的字段,也就是学号这个字段,这样就能把2个表连接起来。哪分别有哪几种关联类型呢?

有如下数据:

1)内关联:inner%20join

比如需求是:得到所有学生有成绩的信息,格式是:学号+班级+科目+成绩,哪么就需要用到inner%20join关联,要求是必须存在学生表中,并且也存在成绩表中的学号。

select %20a.stu_no,%20a.stu_cls,%20b.subject,%20b.score

 %20 from %20t_student%20a

  inner %20 join %20t_score%20b

   %20 on %20a.stu_no%20=%20b.stu_no;

2)左关联:left%20join

比如需求是:得到所有学生的成绩的信息,格式是:学号+班级+科目+成绩,如果某个学生没有成绩也需要显示学生的信息,成绩相关信息的默认为空。

3)右关联:right%20join(与left%20join相反,其实把A,B表互换下可以改写为left%20join)

select %20a.stu_no,%20a.stu_cls,%20b.subject,%20b.score

 %20 from %20t_student%20a

  right %20 join %20t_score%20b

on %20a.stu_no%20=%20b.stu_no;

等价于:

select %20b.stu_no,%20b.stu_cls,%20a.subject,%20a.score

 %20 from %20t_score%20a

  left %20 join %20t_student%20b

   %20 on %20a.stu_no%20=%20b.stu_no;

4)全关联:full%20join

比如需求是:得到所有学生的成绩的信息,格式是:学号+班级+科目+成绩,如果某个学生没有成绩也需要显示学生的信息,成绩相关信息的默认为空,如果有成绩信息,没有学生信息也要显示,学生相关信息默认为空

select %20a.stu_no,%20a.stu_cls,%20b.subject,%20b.score

 %20 from %20t_student%20a

 %20 full %20 join %20t_score%20b

   %20 on %20a.stu_no%20=%20b.stu_no;

各关联条件的效果图:

注意事项:

如果我们在学生信息表里增加一条相同的学号为2的信息,哪么会有什么情况的变化。

数据如下:

内关联:

select %20a.stu_no,%20a.stu_cls,%20b.subject,%20b.score

 %20 from %20t_student%20a

  inner %20 join %20t_score%20b

   %20 on %20a.stu_no%20=%20b.stu_no;

你会发现学号为2的有两个相同的数学成绩,这就是笛卡尔积了,因为在做关联的时候,先读学生表的记录,拿到学号后,再去成绩表中找相同学号的数据,所以在读学生表的时候就读到了2条,然后找到1条成绩信息,2*1=2就得到了2条数据。

大家可以扩展想下,如果在成绩表中也增加1条学号为2的成绩数据,此时的结果又会是什么样呢,大家自己实验下。 更多技术文章请关注公众号:BLT328

相关推荐