ITPub博客

首页 > 数据库 > Oracle > 6-oracle_表关联

6-oracle_表关联

原创 Oracle 作者:blt32034 时间:2019-03-23 18:01:13 0 删除 编辑

表关联是对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


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31535951/viewspace-2639172/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 5-oracle_创建表
请登录后发表评论 登录
全部评论
在快递和物流行业深耕多年,有丰富的行业经验和解决方案。

注册时间:2018-05-07

  • 博文量
    46
  • 访问量
    83784