前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笛卡尔积、等值连接、自然连接、外连接一文看懂

笛卡尔积、等值连接、自然连接、外连接一文看懂

作者头像
BUG弄潮儿
发布2020-09-04 10:18:23
2.6K0
发布2020-09-04 10:18:23
举报
文章被收录于专栏:JAVA乐园JAVA乐园

0x01、笛卡尔积笛卡尔积的元素是元组,关系A和B的笛卡尔积可以记为(AXB),如果A为a目,B为b目,那么A和B的笛卡尔积为(a+b)列的元组集合。(1)学生表和分数表中的信息:学生表: 分数表(大概就是这个样子):(2)学生表和分数表执行笛卡尔积后:

代码语言:javascript
复制
SELECT * FROM student JOIN score

可以看出,执行sql语句后,student表中的每一条语句分别与score表中的每一条语句连接。0x02、内连接内连接又称为普通连接或自然连接。在说自然连接之前,应该先说一下连接的概念,连接是从笛卡尔积中选取属性间满足一定条件的元组。连接运算又可以分为等值连接和自然连接。(1)等值连接当条件为“=”的连接为等值连接,是连接属性值相等的那些元组。其结果是连接的表的所有列,包括重复列。还是运用上面的学生表和分数表:执行以下语句(隐式内连接)过滤掉没有用的元组,保留想要的有意义的元组。

代码语言:javascript
复制
SELECT * FROM student, score WHERE student.studentno=score.studentno

或者(显式内连接)

代码语言:javascript
复制
SELECT * FROM student INNER JOIN score ON student.studentno=score.studentno

即:只有学生表的学号属性和分数表的学号属性相等的时候才会将表中的两个元组相连,与笛卡尔积相比,等值连接添加了限制条件。(2)自然连接自然连接不仅要求连接的两个字段必须同名,还要求将结果中重复的属性列去掉。

代码语言:javascript
复制
SELECT * FROM student NATURAL JOIN score

以上自然连接的查询的元组的条数与等值连接相同,只不过是相同的属性(studentno)只保留了一个。0x03、外连接在以上的学生表和分数表的连接中,存在有些学生分数表中没有对应的该学生的分数信息,同样也有可能存在有分数而没有该学生信息的情况。这些找不到对应的元组进行匹配的元组称为悬浮元组。如果把悬浮元组也保留在结果中,那么这种连接就叫做外连接。(1)左外连接(只保留左边关系中的悬浮元组):为了使查询结果更明显,故意制造一个没有分数的学生:

代码语言:javascript
复制
INSERT INTO student VALUES('111','12345566','1111-11-11','111','111','男','zhai','890')

插入后如果进行等值连接或自然连接都不会出现学号为"111"的学生的信息。但是,如果进行左外连接的查询,会出现该学生的信息,但是有关该学生的成绩的相关信息为空。 执行以下语句,进行学生表和分数表的左外连接:

代码语言:javascript
复制
SELECT * FROM student LEFT OUTER JOIN score ON student.studentno=score.studentno

(2)右外连接(只保留右边关系中的悬浮元组)创建一个学生的分数元组,只有成绩而没有与之对应的学生(学号)

代码语言:javascript
复制
INSERT INTO score VALUES('55','1234344','c8848','87','98','123')

插入后如果进行等值连接或自然连接都不会出现学号为1234344的分数,但是如果进行右外连接,就会出现只有学生的分数信息,而没有该学生的基本信息的情况。

代码语言:javascript
复制
SELECT * FROM student RIGHT OUTER JOIN score  ON student.studentno=score.studentno

4、内连接、外连接之间的关系 如果用上图来表示内连接与外连接之间的关系的话:2:代表内连接1、2:左外连接2、3:右外连接

代码语言:javascript
复制
source:https://www.cnblogs.com/zhai1997/p/11961569.html
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档