0x01、笛卡尔积笛卡尔积的元素是元组,关系A和B的笛卡尔积能够记为(AXB),倘若A为a目,B为b目,那样A和B的笛卡尔积为(a+b)列的元组集合。(1)学生表和分数表中的信息:学生表: 分数表(大概便是这个样子):(2)学生表和分数表执行笛卡尔积后: SELECT * FROM student JOINscore能够看出,执行sql语句后,student表中的每一条语句分别与score表中的每一条语句连接。0x02、内连接内连接又叫作为普通连接或自然连接。在说自然连接之前,应该先说一下连接的概念,连接是从笛卡尔积中选择属性间满足必定要求的元组。连接运算又能够分为等值连接和自然连接。(1)等值连接当要求为“=”的连接为等值连接,是连接属性值相等的哪些元组。其结果是连接的表的所有列,包含重复列。还是运用上面的学生表和分数表:执行以下语句(隐式内连接)过滤掉无用的元组,保存想要的有道理的元组。 SELECT * FROM student, score WHEREstudent.studentno=score.studentno或(显式内连接) SELECT * FROM student INNER JOIN score ON student.studentno=score.studentno
即:仅有学生表的学号属性和分数表的学号属性相等的时候才会将表中的两个元组相连,与笛卡尔积相比,等值连接添加了限制要求。(2)自然连接自然连接不仅需求连接的两个字段必要同名,还需求将结果中重复的属性列去掉。 SELECT * FROM student NATURAL JOIN score以上自然连接的查找的元组的条数与等值连接相同,只不外是相同的属性(studentno)只保存了一个。0x03、外连接在以上的学生表和分数表的连接中,存在有些学生分数表中无对应的该学生的分数信息,一样亦有可能存在有分数而无该学生信息的状况。这些找不到对应的元组进行匹配的元组叫作为悬浮元组。倘若把悬浮元组亦保存在结果中,那样这种连接就叫做外连接。(1)左外连接(只保存左边关系中的悬浮元组):为了使查找结果更显著,故意制造一个无分数的学生: INSERT INTO student VALUES(111,12345566,1111-11-11,111,111,男,zhai,890)
插进后倘若进行等值连接或自然连接都不会显现学号为"111"的学生的信息。然则,倘若进行左外连接的查找,会显现该学生的信息,然则相关该学生的成绩的关联信息为空。 执行以下语句,进行学生表和分数表的左外连接:SELECT * FROM student LEFT OUTER JOIN score ON student.studentno=score.studentno
(2)右外连接(只保存右边关系中的悬浮元组)创建一个学生的分数元组,仅有成绩而无与之对应的学生(学号) INSERT INTO score VALUES(55,1234344,c8848,87,98,123)
插进后倘若进行等值连接或自然连接都不会显现学号为1234344的分数,然则倘若进行右外连接,就会显现仅有学生的分数信息,而无该学生的基本信息的状况。 SELECT * FROM student RIGHT OUTER JOIN score ONstudent.studentno=score.studentnoSELECT * FROM student RIGHT OUTER JOIN score ON student.studentno=score.studentno
4、内连接、外连接之间的关系 倘若用上图来暗示内连接与外连接之间的关系的话:2:表率内连接1、2:左外连接2、3:右外连接
|