最近在自学看 数据库系统概论 这本书,总结一下遇到的问题。
1.广义笛卡尔积(Extende cartesian product):
属于 关系代数 里面的 传统的集合运算。其他的为union,except,intersection.
详情不提了,举个例子就是:
create table R
(
A char(2),
B char(2),
C char(2)
)
create table S
(
A char(2),
B char(2),
C char(2)
)
insert into R values("a1", "b1", "c1")
insert into R values("a1", "b2", "c2")
insert into R values("a2", "b2", "c1")
insert into S values("a1", "b2", "c2")
insert into S values("a1", "b3", "c2")
insert into S values("a2", "b2", "c1")
select * from R cross join S
结果:
A B C A B C
---- ---- ---- ---- ---- ----
a1 b1 c1 a1 b2 c2
a1 b2 c2 a1 b2 c2
a2 b2 c1 a1 b2 c2
a1 b1 c1 a1 b3 c2
a1 b2 c2 a1 b3 c2
a2 b2 c1 a1 b3 c2
a1 b1 c1 a2 b2 c1
a1 b2 c2 a2 b2 c1
a2 b2 c1 a2 b2 c1
行数为 3*3 ,因为k1*k2。
列数为3+3, = 6.
2.投影(projection):
关系R的投影是从关系R中选择出若干属性列组成新的关系。 分为两步: (1)选择出指定的属性,形成一个可能含有重复行的表。 (2)删除重复行,形成新的关系。
我们关注这个重复行:一开始我们同时选取名字和班级的时候,尽管班级有重复,但是整个行来说不重复就行。
当我们转到了只取班级,这就有重复行了,就会被消灭(新版书上体现出来了,这里还保留了重复行)
3.连接(join):
大体上分:
1. 等值连接(内连接)【inner join】:
等值连接是条件连接在连接运算符为“=”号时的特例。
它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组。
自然连接 :是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉 等值连接表示为RA=BS,自然连接表示为RS;自然连接是除去重复属性的等值连接。
两者之间的区别和联系如下:
1、自然连接一定是等值连接,但等值连接不一定是自然连接。等值连接不把重复的属性除去;而自然连接要把重复的属性除去。
2、等值连接要求相等的分量,不一定是公共属性;而自然连接要求相等的分量必须是公共属性。
3、等值连接不把重复的属性除去;而自然连接要把重复的属性除去。
2. 外连接(outer join):
外连接就是自然连接的结果加上被舍弃的悬浮元祖,没有的属性便设定为NULL。
如果只保留左边R的悬浮元素就是左连接(left join),反之就是右连接(right join)
ps:正式名称应该是左/右外连接(left/right outer join)不过一般外面的资料都是简称。
参考:
https://blog.csdn.net/weixin_42194151/article/details/81135212
还有 数据库系统概论第五版