【小白说】数据库系统概念 5

关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。任何一种运算都是将一定的关系作为输入,经过运算后得到一个新的关系作为输出。像函数,输入一个或多个关系,输出一个新的关系。
集合运算符,包括并、交、差、笛卡尔积,用来对关系进行集合层面的组合与比较。
比较运算符,包括大于、小于、等于、不等于等,用来在表达式中比较两个值的大小或相等关系。
专门关系运算符,包括选择、投影、连接、除,是关系代数中特有的、针对关系模型设计的运算。
逻辑运算符,包括与、或、非,用来在表达式中组合多个条件。
传统的集合运算是关系代数的一部分,它把关系看作元组的集合,进行集合层面的操作。主要包括四种:并、差、交、笛卡尔积。
关系的专门运算是关系代数中针对关系模型特有的一些操作,主要包括选择、投影、连接和除运算。选择是选出满足条件的行,投影是选出指定的列,连接是把两张表按条件拼接起来,除是找出满足所有关联条件的数据。
传统的集合运算把关系看作元组的集合,操作着眼于集合层面的组合,比如把两个关系的所有元组并在一起,或者找出它们共有的元组。它关心的是元组集合的加减组合。
专门的关系运算则是从关系的结构特性出发,针对行、列或关联进行重组的操作。比如选择是在行的方向上筛选,投影是在列的方向上筛选,连接是把两个关系的行按条件重新组合。
并,是把两个关系的所有元组合在一起,同时去掉重复的元组。比如两个班级的学生名单合并成一个总名单
交,是找出同时属于两个关系的元组。比如既选修了数学课又选修了语文课的学生名单。
差,是从一个关系中去掉也在另一个关系中出现的元组。比如一班的学生中除去也属于二班的学生,得到只在一班的学生。
笛卡尔积,是将两个关系的元组进行所有可能的配对组合。比如把所有的学生和所有的课程配对,得到每个学生可能选修每门课的所有组合。
选择运算 σ 年龄<20(学生),表示从学生表里选出所有年龄小于20岁的行。
投影运算 π 姓名,专业(学生),表示从学生表里只列出姓名和专业这两列,重复的会被去掉。
R × S 代表关系 R 和关系 S 的笛卡尔积运算。它会把 R 中的每一个元组与 S 中的每一个元组进行配对组合,生成一个新的关系。新关系的列数等于 R 的列数加上 S 的列数,行数等于 R 的行数乘以 S 的行数。
象集是用来描述一个关系中,与某个特定值相关的所有对应值的集合。选课表,包含学号和课程号两列。学号 001 这个学生的象集,就是在选课表里找出所有学号等于 001 的行,然后取出这些行里对应的课程号。比如 001 选了数学和语文,那么学号 001 的象集就是 {数学, 语文}。在数学中,"象"通常指映射产生的像。
"象"这个字在中文里,本意就是事物的样子、形态或通过感官能察觉到的一切迹象。后来在数学里,就被借用过来表示"通过某种规则映射或对应出来的结果"。比如一个数字经过函数运算后得到的结果,就叫它的"像"。
{ t | t ∈ 学生 ∧ t.专业 = '计算机' },这个表达式表示所有这样的元组 t 的集合,t 属于学生表,并且 t 的专业属性等于计算机。
R 和 S 来表示关系,数学和计算机科学领域的一个传统习惯。R 取自英文单词 Relation 的首字母,用来代表一个关系。既然第一个关系用了 R,自然就顺着字母顺序用 S 来代表第二个关系。RSTUVWXYZ
一般连接也叫θ连接,它是从两个关系的笛卡尔积中,选取满足特定连接条件的元组。

等值连接是一般连接里的一种特殊情况。它是从两个关系的笛卡尔积中,选取满足指定属性值相等条件的元组。
一般连接可以用任意比较运算符,等值连接只是把运算符固定为等于号的一种特殊情况。
自然连接是一种特殊的等值连接。它要求两个关系中进行比较的属性必须是同名的属性组,并且在结果中会自动把这些重复的同名列去掉,只保留一列。
一般连接是最通用的,它允许用任意比较运算符连接两个关系的任意属性。
等值连接是一般连接的一种特殊情况,它把运算符限定为等于号,比较的两个属性可以同名也可以不同名。
自然连接是等值连接的一种特殊情况,它要求比较的属性必须同名,并且在结果中自动合并这些重复的同名列。

左外连接以左边学生表为主,结果是所有学生的信息都会保留。即使002没有选课,也会显示出来,选课信息填为空。结果是001张三数学、002李四空。
右外连接以右边选课表为主,结果是所有选课记录都会保留。即使003这个学生不在学生表里,也会显示出来,学生信息填为空。结果是001张三数学、003空语文。
全外连接是两边都保留,结果是001张三数学、002李四空、003空语文。
外连接通常默认是基于自然连接的语义来做的,也就是自动按照同名属性做等值匹配。左外连接、右外连接和全外连接,都是在这个基础上保留一侧或两侧的不匹配行。
R

S

这里的除法运算实际上就是在找R中是否存在这样一个A,使得BC的组合可以覆盖S表中所有BC的组合,这里找的时候需要对于每个A都找出所有BC组合

最终得到的结果是A
SNO 和 CNO 是课本案例里常用的字段名缩写。
SNO 是 Student Number 的缩写,代表学号,用来唯一标识一个学生。
CNO 是 Course Number 的缩写,代表课程号,用来唯一标识一门课程。
SC 表全称是 Student-Course也就是学生选课表。这张表通常用来记录学生选修课程的情况,一般包含学号(SNO)和课程号(CNO)这两个字段

END

相关推荐
014-code1 小时前
Redis 分布式锁:从 0 到 1 完整演变
数据库·redis·分布式
落羽的落羽2 小时前
【Linux系统】磁盘ext文件系统与软硬链接
linux·运维·服务器·数据库·c++·人工智能·机器学习
树码小子2 小时前
Mybatis(17)Mybatis-Plus条件构造器(2)& 自定义 SQL
数据库·sql·mybatis-plus
橘子132 小时前
redis主从复制
数据库·redis·缓存
白太岁2 小时前
Redis:(5) 分布式锁实现:原子性设置锁与 Lua 释放锁
数据库·redis·分布式
zhu62019762 小时前
Postgres数据库docker快速安装
数据库·docker·容器
王德印3 小时前
工作踩坑之导入数据库报错:Got a packet bigger than ‘max_allowed_packet‘ bytes
java·数据库·后端·mysql·云原生·运维开发
数据知道3 小时前
PostgreSQL:如何直接在数据库中查询 CSV/JSON文件?
数据库·postgresql·json
Elastic 中国社区官方博客3 小时前
Elasticsearch 9.3 增加 bfloat16 向量 支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索