数据库 — 关系数据库
2022/2/4 2:14:07
本文主要是介绍数据库 — 关系数据库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1 关系语言的分类
关系语言分为三种:
- 关系代数语言
- 关系演算语言
- SQL 语言
2 关系代数语言
-
定义:关系代数是一种抽象的查询语言,它用对关系的运算来表达查询
-
三大要素
- 运算对象(关系)
- 运算符(集合运算符和专门的关系运算符)
- 运算结果(关系)
-
关系代数运算符
运算符类型 | 符号表示 | 含义 |
---|---|---|
集合运算符 | \(\cup\) | 并 |
集合运算符 | \(-\) | 差 |
集合运算符 | \(\cap\) | 交 |
集合运算符 | \(\times\) | 笛卡尔积 |
关系运算符 | \(\sigma\) | 选择 |
关系运算符 | \(\prod\) | 投影 |
关系运算符 | ⋈ | 连接 |
关系运算符 | \(\div\) | 除 |
2.1 关系运算举例
以两个关系 R 和 S 为例,集合之间的运算如下:
R 关系如下:
A B C \(a_1\) \(b_1\) \(c_1\) \(a_1\) \(b_2\) \(c_2\) \(a_2\) \(b_2\) \(c_1\) S 关系如下:
A B C \(a_1\) \(b_2\) \(c_2\) \(a_1\) \(b_3\) \(c_2\) \(a_2\) \(b_2\) \(c_1\)
1 并集(\(R \cup S\))
A | B | C |
---|---|---|
\(a_1\) | \(b_1\) | \(c_1\) |
\(a_1\) | \(b_2\) | \(c_2\) |
\(a_2\) | \(b_2\) | \(c_1\) |
\(a_1\) | \(b_3\) | \(c_2\) |
2 交集(\(R \cap S\))
A | B | C |
---|---|---|
\(a_1\) | \(b_2\) | \(c_2\) |
\(a_2\) | \(b_2\) | \(c_1\) |
3 差集(\(R - S\))
A | B | C |
---|---|---|
\(a_1\) | \(b_1\) | \(c_1\) |
4 笛卡尔积(\(R \times S\))
R.A | R.B | R.C | S.A | S.B | S.C |
---|---|---|---|---|---|
\(a_1\) | \(b_1\) | \(c_1\) | \(a_1\) | \(b_2\) | \(c_2\) |
\(a_1\) | \(b_1\) | \(c_1\) | \(a_1\) | \(b_3\) | \(c_2\) |
\(a_1\) | \(b_1\) | \(c_1\) | \(a_2\) | \(b_2\) | \(c_1\) |
\(a_1\) | \(b_2\) | \(c_2\) | \(a_1\) | \(b_2\) | \(c_2\) |
\(a_1\) | \(b_2\) | \(c_2\) | \(a_1\) | \(b_3\) | \(c_2\) |
\(a_1\) | \(b_2\) | \(c_2\) | \(a_2\) | \(b_2\) | \(c_1\) |
\(a_2\) | \(b_2\) | \(c_1\) | \(a_1\) | \(b_2\) | \(c_2\) |
\(a_2\) | \(b_2\) | \(c_1\) | \(a_1\) | \(b_3\) | \(c_2\) |
\(a_2\) | \(b_2\) | \(c_1\) | \(a_2\) | \(b_2\) | \(c_1\) |
5 选择(\(\sigma\))
例如:查询关系 R 中 A 属性值等于 \(a_1\) 的集合: \(\sigma_{A='a_1'}(R)\)
- 条件表达式中的运算符
运算符类型 | 运算符符号 | 含义 |
---|---|---|
比较运算符 | \(>\) | 大于 |
比较运算符 | \(\geq\) | 大于等于 |
比较运算符 | \(<\) | 小于 |
比较运算符 | \(\leq\) | 小于等于 |
比较运算符 | \(=\) | 等于 |
比较运算符 | \(◇\) | 不等于 |
逻辑运算符 | ¬ | 非 |
逻辑运算符 | Ʌ | 与 |
逻辑运算符 | ∨ | 或 |
6 投影(\(\prod\))
例如:对关系 R 中属性 A 和 B 进行投影:\(\prod _{A,B}(R)\) ,结果如下
A | B |
---|---|
\(a_1\) | \(b_1\) |
\(a_1\) | \(b_2\) |
\(a_2\) | \(b_2\) |
7 连接
-
四种连接符号
-
悬浮元组:两个关系 R 和 S 在做自然连接时,关系 R 中某些元组有可能在 S 中不存在公共属性上值相等的元组,从而造成 R 中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组
例:有两个关系 R 和 S ,其属性值分别如下:
R 关系如下:
A B C D \(\alpha\) \(1\) \(\alpha\) \(a\) \(\beta\) \(2\) \(\gamma\) \(a\) \(\gamma\) \(4\) \(\beta\) \(b\) \(\alpha\) \(1\) \(\gamma\) \(a\) \(\theta\) \(2\) \(\beta\) \(b\) S 关系如下:
B D E \(1\) \(a\) \(\alpha\) \(3\) \(a\) \(\beta\) \(1\) \(a\) \(\gamma\) \(2\) \(b\) \(\theta\) \(3\) \(b\) \(\mu\)
1 自然连接
- 定义:将共同属性进行等值连接
A | B | C | D | E |
---|---|---|---|---|
\(\alpha\) | \(1\) | \(\alpha\) | \(a\) | \(\alpha\) |
\(\alpha\) | \(1\) | \(\alpha\) | \(a\) | \(\gamma\) |
\(\alpha\) | \(1\) | \(\gamma\) | \(a\) | \(\alpha\) |
\(\alpha\) | \(1\) | \(\gamma\) | \(a\) | \(\gamma\) |
\(\theta\) | \(2\) | \(\beta\) | \(b\) | \(\theta\) |
2 外连接
- 定义:把悬浮元组也保存在结果关系中,而在其他属性上填入空值(\(null\))就叫做外连接
A | B | C | D | E |
---|---|---|---|---|
\(\alpha\) | \(1\) | \(\alpha\) | \(a\) | \(\alpha\) |
\(\alpha\) | \(1\) | \(\alpha\) | \(a\) | \(\gamma\) |
\(\alpha\) | \(1\) | \(\gamma\) | \(a\) | \(\alpha\) |
\(\alpha\) | \(1\) | \(\gamma\) | \(a\) | \(\gamma\) |
\(\theta\) | \(2\) | \(\beta\) | \(b\) | \(\theta\) |
\(\beta\) | \(2\) | \(\gamma\) | \(a\) | \(null\) |
\(\gamma\) | \(4\) | \(\beta\) | \(b\) | \(null\) |
\(null\) | \(3\) | \(null\) | \(a\) | \(\beta\) |
\(null\) | \(3\) | \(null\) | \(b\) | \(\mu\) |
3 左外连接
- 定义:只保留左边关系 R 中的悬浮元组
A | B | C | D | E |
---|---|---|---|---|
\(\alpha\) | \(1\) | \(\alpha\) | \(a\) | \(\alpha\) |
\(\alpha\) | \(1\) | \(\alpha\) | \(a\) | \(\gamma\) |
\(\alpha\) | \(1\) | \(\gamma\) | \(a\) | \(\alpha\) |
\(\alpha\) | \(1\) | \(\gamma\) | \(a\) | \(\gamma\) |
\(\theta\) | \(2\) | \(\beta\) | \(b\) | \(\theta\) |
\(\beta\) | \(2\) | \(\gamma\) | \(a\) | \(null\) |
\(\gamma\) | \(4\) | \(\beta\) | \(b\) | \(null\) |
4 右外连接
- 定义:只保留右边关系 S 中的悬浮元组
A | B | C | D | E |
---|---|---|---|---|
\(\alpha\) | \(1\) | \(\alpha\) | \(a\) | \(\alpha\) |
\(\alpha\) | \(1\) | \(\alpha\) | \(a\) | \(\gamma\) |
\(\alpha\) | \(1\) | \(\gamma\) | \(a\) | \(\alpha\) |
\(\alpha\) | \(1\) | \(\gamma\) | \(a\) | \(\gamma\) |
\(\theta\) | \(2\) | \(\beta\) | \(b\) | \(\theta\) |
\(null\) | \(3\) | \(null\) | \(a\) | \(\beta\) |
\(null\) | \(3\) | \(null\) | \(b\) | \(\mu\) |
8 除 (R \(\div\) S)
- 定义:保留 R 中满足 S 的,而且 R 中的列要去掉 S 的列
设关系 R 如下:
姓名 选修课程 张三 计算机 张三 数据库 张三 网络 李四 网络 李四 计算机 王五 数据库 王五 网络 设关系 S 如下:
选修课程 数据库 网络
则 \(R \div S\) 为:
姓名 |
---|
张三 |
王五 |
2.2 关系的完整性
1 实体完整性
- 主码唯一且非空
2 参照完整性
- 外码要么为空,要么对应另一表的主码
3 用户定义完整性
- 用户定义的关系属性要完整
这篇关于数据库 — 关系数据库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略