左外连接,右外连接,全外连接,自然连接

匿名 (未验证) 提交于 2019-12-02 23:49:02

首先建立两张表:

-- 部门表

-- 员工表

);

INSERT INTO employees VALUES(007,'ddd',6,0);

1. 左外连接:左外连接=内部连接+左边表中失配元组

返回包括左表中的所有记录和右表中联结字段相等的记录

--列出部门IDΪ3的部门和员工信息,不管该部门是否有员工

/*如果员工表作为做外链接的左边,那么所有数据必须是员工表里

存在的数据,即先到员工表查数据,拿到这些数据再到右边的部门表

一条一条查找,有就显示,没有就null

*/

ORDER BY d.depID;

ORDER BY d.depID;

一条一条去右边查询,如果有就显示,没有就为null

*/

2.右外连接:右外连接=内部连接+右边表中失配元组

返回包括右表中的所有记录和左表中联结字段相等的记录

/*如果部门表作为做外链接的左边,那么所有数据必须是部门表里

存在的数据,即先到部门表查数据,拿到这些数据再到右边的员工表

一条一条查找,有就显示,没有就null

*/

ORDER BY d.depID;

--它的数据是可选的(有就显示,没有就null,条件是没有(+)的表每一条作为查询条件)

3.全外连接:查询结果等于左外连接和右外连接的和

--FULL OUTER JOIN:全外连接

4.自然连接:(列不能加限定条件)

属性值相同的就保留下来,如果属性值不相同则去掉,连接后的表的属性值个数为原来两个表的属性之和减去公共属性的个数,如果两个表没公共属性则自然连接就是笛卡尔乘积。

自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。

自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。(inner join的结果包含重复属性,并且连接方式区别于自然连接)

一个简单的例子,将下列关系R和S进行自然连接:

R:

A B C

a b c

b a d

c d e

d f g

S:

A C D

a c d

d f g

b d g

首先要对两个关系中相同属性组的分量进行相等比较,即比较R.A,R.C 和 S.A , S.C;

因 R中AC属性第一行元组分量a、c与S中AC属性第一行元组分量a、c相等 选取为结果之一

因 R中AC属性第二行元组分量b、d与S中AC属性第三行元组分量b、d相等 选取为结果之一

因 S中AC属性第三行元组分量d、f与R中AC属性各个元组分量均不等 不选取

其余属性不重复则保留,且保留的分量为选取的元组同组分量。

因此进行连接得到结果:

A B C D

a b c d

b a d g

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!