一、笛卡尔积:sql
笛卡尔积的元素是元组,关系A和B的笛卡尔积能够记为(AXB),若是A为a目,B为b目,那么A和B的笛卡尔积为(a+b)列的元组集合。spa
(1)学生表和分数表中的信息:code
学生表:blog
分数表(大概就是这个样子):class
(2)学生表和分数表执行笛卡尔积后:sql语句
SELECT *
FROM student JOIN score
能够看出,执行sql语句后,student表中的每一条语句分别与score表中的每一条语句链接。im
二、内链接:查询
内链接又称为普通链接或天然链接。在说天然链接以前,应该先说一下链接的概念,链接是从笛卡尔积中选取属性间知足必定条件的元组。链接运算又能够分为等值链接和天然链接。db
(1)等值链接:img
当条件为“=”的链接为等值链接,是链接属性值相等的那些元组。其结果是链接的表的全部列,包括重复列。
仍是运用上面的学生表和分数表:
执行如下语句(隐式内链接):
过滤掉没有用的元组,保留想要的有意义的元组。
SELECT *
FROM student,score
WHERE student.studentno=score.studentno
或者(显式内链接):
SELECT *
FROM student INNER JOIN score ON
student.studentno=score.studentno
即:只有学生表的学号属性和分数表的学号属性相等的时候才会将表中的两个元组相连,与笛卡尔积相比,等值链接添加了限制条件。
(2)天然链接:
天然链接不只要求链接的两个字段必须同名,还要求将结果中重复的属性列去掉。
执行语句:
SELECT *
FROM student NATURAL JOIN score
以上天然链接的查询的元组的条数与等值链接相同,只不过是相同的属性(studentno)只保留了一个。
三、外链接
在以上的学生表和分数表的链接中,存在有些学生分数表中没有对应的该学生的分数信息,一样也有可能存在有分数而没有该学生信息的状况。这些找不到对应的元组进行匹配的元组称为悬浮元组。
若是把悬浮元组也保留在结果中,那么这种链接就叫作外链接。
(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
ON student.studentno=score.studentno
四、内链接、外链接之间的关系:
若是用上图来表示内链接与外链接之间的关系的话:
2:表明内链接
一、2:左外链接
二、3:右外链接