6-oracle_表关联

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

有如下数据:

1)内关联:inner join

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

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

  from t_student a

 inner join t_score b

    on a.stu_no = b.stu_no;

2)左关联:left join

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

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

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

  from t_student a

 right join t_score b

on a.stu_no = b.stu_no;

等价于:

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

  from t_score a

 left join t_student b

    on a.stu_no = b.stu_no;

4)全关联:full join

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

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

  from t_student a

  full join t_score b

    on a.stu_no = b.stu_no;

各关联条件的效果图:

 

注意事项:

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

数据如下:

内关联:

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

  from t_student a

 inner join t_score b

    on a.stu_no = b.stu_no;

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

大家可以扩展想下,如果在成绩表中也增加1条学号为2的成绩数据,此时的结果又会是什么样呢,大家自己实验下。

更多技术文章请关注公众号:BLT328

猜你喜欢

转载自blog.csdn.net/u012667253/article/details/88765045