外码
- 属性的相对应: 属性名可以不同,但是域相同
- 设F是基本关系A的一个或一组属性,但不是关系A的码(不能唯一确定),KS是基本关系B的主码。如果F与Ks相对应,则称F是A的外码,并称基本关系A为参照关系。B为被参照关系。
- 不同关系中的属性如果相对应,一般取相同的名字,反正他们的域相同。比如有这么个属性M。
- 参照关系:M不是码
- 被参照关系:M可以为主码
- 在参照关系中,M的值要么为空,要么参考主码(也就是被参照关系中M有的值)
- 当然,同一关系中的属性也可以相对应,这时一般取不同的属性名。该表是参照关系,也是被参照关系。
关系的运算
- 集合运算符
| 运算符 | 运算 | 运算条件 |
|---|---|---|
| ∩ 交 | 就跟普通集合运算一样,只是元素变为元组了 | - 目(列)相同 - 对应的属性的域相同 |
| ∪ 并 | ||
| - 差 | ||
| × 笛卡尔积 | 得到的关系目为两关系目相加 |
- 条件表达式中的运算符
| 运算符 | 运算 | 描述 |
|---|---|---|
| σ | 选择 | 水平分割,留下符合条件的元组 |
| π | 投影 | 垂直分割,留下符合条件的属性 |
| ▷◁ | 连接 | 两个关系笛卡尔积,再筛出符合条件的元组 |
| ÷ | 除 | |
| <> | 不等于 | |
| ¬ | 非 | |
| ∨ | 或 | |
| ∧ | 与 |
选择
- SQL语言:
- select * from student
- where 性别 = ‘女’
- 关系代数语言:
- 查询年龄小于20岁的学生。
- σ sage < 20(Student) —(多个条件用 ∧ 隔开)
投影
**
- SQL语言:
- select Sname,Ssex from student;
- 关系代数语言:
- 求Student关系上学生姓名和所在系两个属性上的投影
- π sname,Sdept(Student) —(多个条件用 , 隔开)
连接
普通连接
- R ▷◁ S =
- AθB
- θ:比较运算符 = < 之类的
- A B: R和S上的属性
等值连接:
- 当θ为=符号 如:
- R ▷◁ S =
- R.B=S.B
自然连接:
- R ▷◁ S (无条件)
- 在等值连接的基础上,删去属性相同的属性
悬浮元组:
- 在等值连接过程中,R或S中没选上的元组
外连接(前连接)(full join):
- 等值连接中,把悬浮元组最后加入所得表,缺失的分量用NULL填充
- 左外连接:外连接中只留下左表的悬浮元组
- 右外连接:外连接中只留下右表的悬浮元组
- SQL语言
- 例(左):SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
- FROM Student
- LEFT JOIN SC ON(Student.Sno=sc.Sno);
自身连接
- 一个表与其自己进行连接需要给表起别名以示区别
- 必须使用别名前缀
- 例:
- 除去R中与S相同的属性
- 逐一检测R中的元组,若其象极涵盖所有S中与R相同的部分,则留下,否则剔除
象极
- 例如:求某一元组中某一属性的一个分量的象极
- 仅把含该分量的元组留下,再除外场上的该分量所在的属性,形成的关系就是答案!YA☆TA☆ZE
- 也可以求某一元组中多个属性分量的象极
