2:关系模式(3)
1 基本概念
关系、候选键、外部键、主属性、非主属性、关系模式、关系数据库。
关系模式完整性
候选码
:候选码就是可以区别一个元组(即表中的一行数据)的属性或属性的集合,比如学生表student(id,name,age,sex,deptno),其中的id是可以唯一标识一个元组的,
所以id是可以作为候选码
的,既然id都可以做候选码了,那么id和name这两个属性的组合可不可以唯一区别一个元组呢?显然是可以的,此时的id可以成为码,id和name的组合也可以成为码,
但是id和name的组合不能称之为候选码
,因为即使去掉name属性,剩下的id属性也完全可以唯一标识一个元组,就是说,
候选码中的所有属性都是必须的,
缺少了任何一个属性,就不能唯一标识一个元组了。
候选码的定义:
可以唯一标识一个元组的最少的属性集合。
主码:一个表的候选码可能有多个,从这些个候选码中选择一个做为
主码
,至于选择哪一个候选码,这个是无所谓的,只要是从候选码中选的就行。
主属性
:能作为候选码的属性称为主属性;****
非主属性:关系中不组成候选码的属性均为非主属性。==》一个关系中,除去主属性,其它都是非主属性。
关系数据库中,关系模式是型,关系是值。
关系模式
是对关系的描述。
关系
是元组的集合,因此关系模式必须指出这个元组集合的结构,即它由那些属性构成。这些属性来至那些域。
关系数据库
:例如导师实体、研究生实体、导师和研究生一对多联系都可以分别用一个关系表示,在一个给定的应用领域,所有关系的集合构成一个关系数据库。
说明:关系:就是元组的集合;
2 关系代数及其运算
任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。所以
运算对象、运算符、运算结果
是运算的三大要素。
关系代数的运算对象是关系,运算结果也是关系。关系代数用到的运算符包括两类:集合运算符和专门运算符。如下图所示。
关系代数运算符
并差交笛卡儿积运算:
集合运算符案例:
1:并
2:差
差:R-S的解释:R中有,且S中没有的记录。
3:交
4:笛卡儿积
关系R为n列,k1元组、关系S为m列,k2元组。R中每个k1与S每个k2组成新的关系。
形成的新的关系一共有K1*K2条记录
专门的关系运算符:
1:选择
2:投影
3:连接:
专门的关系运算符案例:
选择:
假设Student关系表如下:
投影:
连接:
关系R (4条)
A |
B |
C |
a |
b |
c |
b |
a |
d |
c |
d |
e |
d |
f |
g |
关系S(3条)
A |
C |
D |
a |
c |
d |
d |
f |
g |
b |
d |
g |
交叉连接 (4*3=12条记录)—》笛卡儿积
SELECT * FROM R CROSS JOIN S
R.A |
R.B |
R.C |
S.A |
S.C |
S.D |
a |
b |
c |
a |
c |
d |
a |
b |
c |
d |
f |
g |
a |
b |
c |
b |
d |
g |
b |
a |
d |
a |
c |
d |
b |
a |
d |
d |
f |
g |
b |
a |
d |
b |
d |
g |
…. |
|
|
|
|
|
等值连接
自然连接
外连接
1:左外
2:右外
3:完全外
理论:
左外:先自然连接,成为ABCE。以左边的为基准,所以B列的b5没了。
右外:
先自然连接,以右边的S为基准,保留B列共同的值,R中的b4没有所以删除了。
完全外
不满足R.B=S.B 的元组保留。
实战
搭建本节课环境,创建如下两张表
学生表(学号,姓名) 和 选课成绩表(课程号,学号,分数)
create table student
(
学号 varchar(10) primary key,
姓名 varchar(20)
)
create table course
(
课程号 varchar(5) primary key,
学号 varchar(10),
分数 float
)
insert into student values(’01’,’罗’),(’02’,’张’);
insert into course values(‘010′,’01’,90),(‘020′,’03’,85);
知识点1:左外连接【以左边的表为主表】
语法:select student.学号,student.姓名,course.课程号,course.分数
from student left join course
on student.学号 = course.学号
总结:左边的表的记录完全输出,右边的边仅输出满足条件的
on后面的语句就是条件
知识点2:右外连接【以右边的表为主表】
语法:select student.学号,student.姓名,course.课程号,course.分数
from student right join course
on student.学号 = course.学号
知识点3:完全外连接【两个表的记录全部输出】
语法:select student.学号,student.姓名,course.课程号,course.分数
from student full join course
on student.学号 = course.学号
小结:
左外链接:查看【学生】的选课情况
右外连接: 查看【课程】的选课情况
完全外连接:查看【学生】 和 【课程】的选课情况