数据笛卡尔积是什么(笛卡尔积等值连接)

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

SELECT*FROMstudentJOINscore

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

SELECT*FROMstudent,scoreWHEREstudent.studentno=score.studentno

或者(显式内连接)

SELECT*FROMstudentINNERJOINscoreONstudent.studentno=score.studentno

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

SELECT*FROMstudentNATURALJOINscore

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

INSERTINTOstudentVALUES('111','12345566','1111-11-11','111','111','男','zhai','890')

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

SELECT*FROMstudentLEFTOUTERJOINscoreONstudent.studentno=score.studentno

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

INSERTINTOscoreVALUES('55','1234344','c8848','87','98','123')

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

SELECT*FROMstudentRIGHTOUTERJOINscoreONstudent.studentno=score.studentno

数据笛卡尔积是什么(笛卡尔积等值连接)(1)

SELECT*FROMstudentRIGHTOUTERJOINscoreONstudent.studentno=score.studentno

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

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页