精华内容
下载资源
问答
  • 关系模型 一、数据结构 就是一张二维表,这种表示关系的集合,二维表的一行就是一个对象(实体) 术语: 域——表的一列就是一种域,他们拥有相同的数据类型,域必须是原子的,不可分割的 元组——表的一行,代表一...

    关系模型

    一、数据结构
    就是一张二维表,这种表示关系的集合,二维表的一行就是一个对象(实体)
    术语:

    • 域——表的一列就是一种域,他们拥有相同的数据类型,域必须是原子的,不可分割的
    • 元组——表的一行,代表一个实体
    • 目、属性——都是描述一个域,也就是描述列的
    • 超码——某一个属性集可以唯一标识一张表
    • 候选码——最小的超码,候选码集合中的属性不能分割,如果分割就不能唯一标识这张表
    • 主码——一般挑最简单的、而且不可能重复和变化的候选码作为主码
    • 外码——用来参照其他表的,只能在参照表的主码中选择

    在这里插入图片描述
    二、关系数据操作——集合操作方式
    增删改查
    其中查询操作可以分为:选择(select)、投影(project)、连接(join)、除(divide)、 并(union)、交(intersection)、差(except)、笛卡尔积等(在后面会细讲)
    三、关系数据约束

    • 实体完整性——主码不能是空
    • 参照完整性——外码要么为空要么是主码
    • 数据库模式导航图
    • 用户自定义完整性——针对不同的业务会有不同。
      1、 限制关系中某些属性的取值要符合业务语义要求。
      2、限制关系中某些属性的取值之间需要满足一定的逻辑关系。
      3、限制关系中某属性集上的取值必须唯一。

    关系代数

    关系代数是通过关系代数运算构成的表达式来表达查询
    一、传统的集合运算

    前提假设:关系r和关系s具有相同的n个属性,且相应的属性取自同一个域,即两个关系的模式或结构相同。t是元组变量,t∈r表示t是r的一个元组。
    (说人话就是两张表的表头要一样)

    在这里插入图片描述在这里插入图片描述
    说明:对于笛卡尔积这个传统运算,其实不需要一定有重复的属性(也即是不一定要有相同的表头) 在这里插入图片描述

    二、专门的关系运算

    - 选择——就是横向选择一些满足条件的元组构成表

    在这里插入图片描述
    记忆:在r关系表中找到满足p条件的元组 在这里插入图片描述

    - 投影——选择某一列的操作

    在这里插入图片描述
    记忆:在关系表r中找到条件A列(或者说属性是A的列) 在这里插入图片描述

    - 连接——就是对两个表在一定条件下的笛卡尔乘积,也叫θ连接

    θ连接运算就是从关系r和s的笛卡尔积r×s中,选取r关系在A属性集上的值与s关系在B属性集上的值满足连接谓词θ的所有元组,即
    在这里插入图片描述
    记忆:在θ条件下对r和s表格进行笛卡尔乘积

    连接运算分为等值连接和自然连接,等值连接就是θ为等值比较谓词的连接运算在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    特别要注意关系r3,虽然r1和r2表有完全相同的属性,但是做笛卡尔乘积不会吧重复的属性去掉的,还是照旧做笛卡尔乘积
    在这里插入图片描述

    - 除运算

    这里先举一个例子:
    需要查找修读过信息学院开设的所有课程的学生学号,如何表达查询?
    在这里插入图片描述在这里插入图片描述
    所以这里给出定义:
    在这里插入图片描述
    理解:
    1、设关系r®和s(S),属性集S是R的子集—首先要有两个关系r和s(就好像前面例子的r1和r2两个关系),这两个关系要有相同的属性集,也就是有包含关系,图片说的s包含于r(就好像我们的例子r2有属性值“courseNo”包含于r1的“studentNo,courseNo”)
    2、r÷s是关系r中满足下列条件的元组在属性集R-S上的投影—这个的理解就是我们得到的结果一定是大的关系的属性集减掉小的关系的属性集,最后剩下的那个属性集(这里我标记为A集,方便后面描述)
    3、任意 t属于r,记 x= t [R-S],则关系r中属性集R-S的取值x的象集Sx包含关系s—也就是在A集中找一个元素x,x的象集Sx要是包含关系(也就是大于等于)s,那这个x就是我们想要的结果的一个元素
    4、什么是象集—就是含有x的所有S的元素,简单说就是在r关系中,含有x的所有元祖,去掉x之后的结果。
    举一些例子说明
    在这里插入图片描述
    这里无论是R/S1 、R/R2 、R/R3三个关系里,象集都是:
    当x=3,它的象集是:101、102、103、104
    当x=5,它的象集是:101、102
    当x=8,它的象集是:102
    当x=10,它的象集是:102、104
    所以
    在R/S1,结果是3、5、8、10(因为四个元素都包含有102)
    在R/R2,结果是3、10(因为只有这两个元素同时都包含102、104)
    在R/R3,结果是3(只有一个关系满足条件)

    展开全文
  • 数据库理论:关系代数与 SQL

    千次阅读 2021-01-13 23:29:44
    目录前言关系代数选择语句投影语句连接语句除法(重要⚠)关系代数例题SQL视图模式匹配聚合,分组与HAVING子查询SQL 例题 前言 关系代数通过符号化的语言,来描述数据库的行为关系,相当于简化版的 SQL。比如并,交...

    前言

    关系代数通过符号化的语言,来描述数据库的行为关系,相当于简化版的 SQL。比如并,交,差,笛卡尔积,除法,select 语句等等。

    SQL 则是结构化查询语句,相比于关系代数,更方便被计算机识别的一种查询语言。


    其余的复习笔记:

    数据库理论:函数式依赖,无损拆分,依赖保留拆分与数据库范式

    数据库理论:ER模型,关系转换,并发控制与冲突可串行化调度

    关系代数

    交,并,差,笛卡尔积等符号,和数学上的符号完全一致,只是运算的单位不是集合而是表。

    交运算取两张表相同的字段。并运算类似,也是合并相同的字段,同时加入不相同的字段:

    在这里插入图片描述
    差运算则是减去两者的交集。笛卡尔积则组合任意的属性:
    在这里插入图片描述

    选择语句

    关系代数中用符号 σ(西格玛,sigma)来描述选择语句。此外我们可以在 select 的同时,添加限制条件(即 where),使用例如下:

    σ 选 择 条 件 ( 数 据 表 名 称 ) \sigma_{选择条件}(数据表名称) σ()

    比如:
    σ A G E = 19 ( s t u d e n t ) \sigma_{AGE=19}(student) σAGE=19(student)

    就等价于:

    select * from student where AGE=19;
    

    投影语句

    在关系代数中的投影语句相当于 SQL 中的字段筛选,可以选择特定的字段进行查询,格式如下:

    π 属 性 ( 表 名 ) \pi_{属性}(表名) π()

    比如:

    π s n o ,   a g e ,   s n a m e ( s t u d e n t ) \pi_{sno, \ age, \ sname}(student) πsno, age, sname(student)

    就等价于:

    select sno, age, sname from student;
    

    此外,投影语句也可以和选择语句的 where 联动:

    π s n a m e ( σ A G E = 19 ( s t u d e n t ) ) \pi_{sname}(\sigma_{AGE=19}(student)) πsname(σAGE=19(student))

    就相当于一个完整的 select 语句:

    select sname from student where AGE=19;
    

    连接语句

    关于连接的 SQL 版本,可以看我之前的博客:MySQL 连接(JOIN)使用 简单讲解与示例

    关系代数版本的连接语句如下,假设有两张表 R 和 S,通过某些条件把他们进行连接,用 ∞ 号表示连接:

    R   ∞ 连 接 条 件   S R \ \infty_{连接条件} \ S R  S

    这相当于先将两张表取笛卡尔积,再根据连接条件从中进行筛选:

    R   ∞ 连 接 条 件   S ↔ σ 连 接 条 件 ( R × S ) R \ \infty_{连接条件} \ S \leftrightarrow \sigma_{连接条件}(R \times S) R  Sσ(R×S)

    一般连接中都认为连接条件是带有等号的(比如外键),这种连接叫做等号连接。通常可以省略连接条件。能够省略的又称为 “自然连接” (natural join)

    在这里插入图片描述

    外连接则是在内连接的基础上,为无法匹配的记录 添加空行

    在这里插入图片描述

    除法(重要⚠)

    除法是乘法(笛卡尔积 )的逆运算,值得注意的是,关系代数中除法只为整除

    只有当除表的所有记录,在被除表中全部命中时,才认为发生了整除。如下图,当 A 表中某几条记录完全被 B 完成命中时,才认为发生整除,其他部分都不算整除。

    下图颜色三个除法例子。可以用 A÷B 再 × B,就能得到下图的颜色标记部分:

    在这里插入图片描述

    除法常用作选取带有 ALL 字眼的题目,比如选取选了所有课程的学生,那么用课程表去(course)除选课记录表(SC),就能得有选了所有课程的学生:

    在这里插入图片描述

    关系代数例题

    假设有三张表:

    1. 供应商 supplier,S
    2. 产品 product,P
    3. 购买记录 SP

    有如下的四个例题,题干和答案,分析如下:
    在这里插入图片描述

    第一题比较简单,直接连接一次即可。

    第二题需要连接两次。第一次连接找出 SP 表中所有 color=red 的记录,第二次连接找出这些记录对应的 supplier 的 sname

    第三题先利用 SP÷P 找出所有 supply 了所有 parts(products)的 supplier 的 #S(即 sid),然后再和 S 表连接,找出 sname

    第四题题干比较绕,就是找出一些供应商,他们买了所有【供应商 S2 购买的产品】,结合题目的表来看,S2 买了 P1,P2。于是我们要找出所有也同时买了 P1,P2 的供应商。

    注:
    这里其实我根本没有看懂题干,是通过关系代数表达式反推的题目。。。
    不得不吐槽巴斯克桑的英语咖喱味太浓了,或者说我的英语太种花
    至今不明白学校为何不用中文 ppt
    OTL

    SQL

    没啥特别的,真不熟

    就是提几点比较冷门或者比较难的:

    视图

    创建视图允许用户访问一个表的部分,方便管理权限,有着管中窥豹的作用。视图可以看作一张 “虚表”。

    通过 create 语句可以创建视图,视图的创建基于 select 语句,选择某些属性暴露在外:

    在这里插入图片描述

    模式匹配

    通过 LIKE 子句,在 where 中使用 like 来进行模式匹配,进而进行筛选。其中:

    1. % 号能够匹配任意字符串,包括空串
    2. _ 号能够匹配单个字符

    是不是有点像 leetcode 的某一题模式匹配?

    在这里插入图片描述

    聚合,分组与HAVING

    聚合函数通常计算某一群记录的聚合值,比如平均数。常用的有:

    • COUNT:计数
    • AVG:平均
    • MAX:极大
    • MIN:极小
    • SUM:求和

    比如计算每个月 A 产品的平均售价:

    select AVG(售价) from 数据表
    where 产品id=A
    

    那么最终结果只会返回一行,就是均值!

    聚合函数会将所有记录都压缩为一条记录。而分组(group by)则允许我们拆分这些聚合的过程,或者说是分组聚合。

    比如按照月份分组,计算每个月 A 产品的平均售价,那么有:

    select AVG(售价) from 数据表
    where 产品id=A
    group by month
    

    where 子句在分组(group by)之前进行筛选,而 having 子句则可以在分组之后进行筛选。

    还是以上面的例子为拓展,比如按照月份分组,计算每个月 A 产品的平均售价。此外,我们只需要 5 月份以后的数据,那么有:

    select AVG(售价) from 数据表
    where 产品id=A
    group by month
    having month>=5
    

    having 的用途就很清晰了。因为聚合函数返回的记录不止一条(比如典型的按月 group by),having 负责在 group by 之后再次筛选结果。

    子查询

    嵌套的查询。类比于 c 语言的多层 for 循环。子查询返回一条记录,或者几条(那就是集合了)

    可以使用 IN,ANY,ALL 等关键字对子查询返回的集合进行判断。

    当返回一条记录时,我们可以利用等号来进行判断。比如查询所有和 BOB 一个部门的员工(通过部门 id,deptno 来判断):

    select * from employee
    where deptno=(
    	select deptno from employee where ename='BOB'
    	);
    

    而如果 BOB 不止一个,即子查询返回的是一个集合,那么我们使用 ANY 或者 ALL 来进行判断。

    如果有两个 BOB 在不同的部门 A,B 那么我们利用 ANY 子句,只要和任意一个 BOB 在同一个部门,不管是 A 还是 B,我们都选上:

    select * from employee
    where deptno = ANY (
    	select deptno from employee where ename='BOB'
    	);
    

    其中 ANY,SOME 都是只要命中一条即可返回 true,而 ALL 要求全部命中,否则返回 false。此外,exist 要求子查询返回的结果不为空集,not exist 则相反。

    比如查找所有成绩(gpa,绩点,分数)大于 A01 班级所有人的同学:

    select * from student
    where gpa > ALL (
    	select gpa from student where classNO='A01'
    );
    

    当前同学的 gpa 必须大于子查询返回的集合中的任意一个 gpa,否则查询失败。这表示我们通过二重循环进行查询。

    外循环枚举每个学生,内循环枚举所有 A01 班的学生,判断,翻译为 std c++ 代码大概长这样:

    struct STUDENT
    {
    	std::string sname;
    	std::string classNO;
    	float gpa;
    	...
    };
    
    std::vector<STUDENT> student;
    
    for(int i=0; i<student.size(); i++)
    {
    	float gpa = student[i].gpa;
    	for(int j=0; j<student.size(); j++)
    	{
    		if(student[j].classNO != "A01") continue;
    		if(gpa > student[j].gpa)
    			std::cout<<student[i]<<std::endl;	// 满足条件 输出当前学生
    	}
    }
    

    复杂度 n 方起步。所以子查询是非常消耗性能的,能不用就不用。

    SQL 例题

    生僻题,不用连接,用子查询。

    题①:找出选修全部课程的学生。思路是双重否定。先找出有缺课(即没有选修全部课程)的学生,然后再遍历所有学生,排除那些缺课的学生:
    在这里插入图片描述

    题②:假设学号为 2006002001 的学生选课的集合为 X,找出选修了 X 中所有课程的学生。思路和上一题类似,只是【全部课程】改为了【X 集合中的课程】,思路还是双重否定:

    select * from Student s
    where not exist (
    	select * from course c
    	where sid=2006002001
    	and not exist (
    		select * from sc
    		where s.sid=sc.sid
    		and c.cid=sc.cid
    	));
    

    这里就能体现关系代数的方便。直接一次除法就搞定了,不把那子查询干的碎碎的?

    展开全文
  • 关系代数

    千次阅读 2021-01-28 01:16:45
    关系代数的由来 首先从宏观上来认识一下关系演算这个概念,换句话讲也就是什么是关系代数,这也是我在接触一些东西的首要工作。大家都知道对于关系型数据库的数据库操作语言分为查询更新两类。而查询语言这块,又...

    关系代数的由来 首先从宏观上来认识一下关系演算这个概念,换句话讲也就是什么是关系代数,这也是我在接触一些东西的首要工作。大家都知道对于关系型数据库的数据库操作语言分为查询和更新两类。而查询语言这块,又分为关系代数语言与关系演算语言。这里讲的

    关系代数的由来

    首先从宏观上来认识一下关系演算这个概念,换句话讲也就是什么是关系代数,这也是我在接触一些东西的首要工作。大家都知道对于关系型数据库的数据库操作语言分为查询和更新两类。而查询语言这块,又分为关系代数语言与关系演算语言。这里讲的就是关系代数。所以可以这样定义,关系代数就是为数据库操作语言进行查询的集合操作。

    关系代数中的操作可分为两类

    (1)传统的集合操作:并、差、交、笛卡儿积、除法。

    (2)扩充的关系操作:投影、选择、连接、。

    常见符号

    697c53bce42c08fcb8484903821aee70.png

    五种基本的关系代数

    1、并

    设关系R和S具有相同的关系模式,R和S的并是由属于R或属于S的元组构成的集合,记为R∪S。形式定义如下:喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+UqHIU6HUe3Qg" t∈R ∨ t∈S},t是元组变量,R和S的元数相

    0bf6b5767cc8a5936ec1c7a1d601d697.png

    2、差(Difference)

    设关系R和S具有相同的关系模式,R和S的差是由属于R但不属于S的元组构成的集合,记为R-S。形式定义如下:

    R-S≡{ t " t∈R ∧ t∈S},R和S的元数相同。

    6310c7775f63d4c679e5fa9b79eb1642.png

    3、笛卡儿积(Cartesian Product)

    设关系R和S的元数分别为r和s,定义R和S的笛卡儿积是一个(r+s)元的元组集合,每个元组的前r个分量(属性值)来自R的一个元组,后s个分量来自S的一个元组,记为R×S。

    3a04a55177e2b55806d6ec5bc8914479.png

    4、投影(Projection)

    这个操作是对一个关系进行垂直分割,消去某些列,并重新安排列的顺序。

    表示符号

    π

    8268460aa1d128dd9fea6e2d957354f5.png

    5、连接

    这个操作是根据某些条件,对既定的集合进行条件选择。

    σ为选择运算符

    92f0fab673c6db8bcde1f16726782660.png

    对于基本的关系代数操作,可以发现。之前的三种针对的都是两个或者两个至上的集合操作,而后两种操作的都为一个集合。

    扩充的代数操作

    这个操作就是从两个集合内找出既属于R有属于S集合的元素的集合。符号:∩

    如图

    f098ab733c2b446b2232e9ca0a0f30a7.png

    图中两个集合相同的部分为第一行元素。

    除的操作要求进行操作的两个关系集合需要有重叠的属性。

    实例图表

    eafc6e5f48103c28c4c563777eaa610c.png

    结果

    7b9ca55065d079b540677d65b1138e39.png

    连接

    所有的连接操作都是在进行笛卡尔积的基础上进行一些相应的条件操作。所以根据条件不同,分为等值连接、自然连接、θ连接。

    θ连接

    cf1a1cdc51547f232462d998f572220f.png

    表示从RS中分别选取R的第i列和S的第j列进行连接操作。

    等值连接

    等值连接就是当θ的值为等于号时的连接。

    自然连接

    自然连接是一种比较特殊的连接,要求两个连接的关系中必须要有相同的属性。如

    d9c694c37fc908cb7ead53ab668a3c20.png

    如图,两个集合存在相同的属性Sno这样将这两个不同集合中相同属性的一行连接,得到结果。

    如上就是关系代数的一些基本操作和扩展操作,更多的需要从实际的例子来理解定义这样会便于理解。对于基本的操作,并、差、笛卡尔积针对的都是两个不同的集合的操作;而投影和连接针对既定集合的操作。扩展中的运算主要是连接,连接根据θ的值的不同来区分到底是自然连接和等值连接;等值连接和自然连接都是θ值在不同情况下的特殊状态。

    f68f2add0b68e4f9810432fce46917b7.png

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!

    展开全文
  • 数据库关系代数详解

    万次阅读 多人点赞 2021-02-26 16:35:55
    数据库关系代数 1. 关系代数的运算 1.1 传统的关系运算 传统的关系运算起源于数学的集合论,有下面几种: 笛卡尔积运算 差运算 交运算 并运算 1.2 专门的关系运算 选择 投影 连接 除运算 1.2.1 关系运算中的基础...

    数据库关系代数

    1. 传统的关系运算

    传统的关系运算起源于数学的集合论

    1. 笛卡尔积运算
    2. 差运算
    3. 交运算
    4. 并运算

    2. 专门的关系运算

    数据库中特有的运算规则

    1. 选择
    2. 投影
    3. 连接
    4. 除运算

    2.1 关系运算中的基础概念

    在学习关系代数的时候,脑海中要时刻拥有一张表格,还有表格的一些参数,表格如下:

    比如说我们每个人都见过成绩单,牢记以下的比喻

    • R(关系模式)就是一张表格(成绩单)。

    • R[A1, A2, A3,…Ai] = R[语文,英语,数学……学科]

    • t 为某个同学

    • t [Ai] 就可以当作某个同学的某一门成绩

    例如:R为期中考试全班的成绩单,R[A1, A2, A2…Ai]为考试所有科目,t 代表了张三这个人,t[Ai]代表了张三某门课程的考试成绩。

    • A不再是单独的一个属性,A可以代表一个或者多个属性
    • t[A]也不再是单独的某个属性分量,A代表多少个属性,t[A]就可以代表多少个属性分量
    • 做一个比喻,A再也不单独是某个学科,而是可以代表一科或者多科学科
    • t[A]也就不当作某个同学的一门成绩,而是可以当成某个同学的多门成绩,具体看A代表了多少学科
    • A头上一横……)就代表了除了A代表的学科以外的所有学科

    2.2 元组的连接

    通过连接得到的这个元组有以下属性

    • 前 m 个分量来自于 R 表中的一个 m 元组
    • 后 n 个分量来自于 S 表中的一个 n 元组

    2.3 象集(除法运算重要工具)

    给了我们一个关系R(X,Y)XY都代表了一个属性组,也就是XY都是属性的数量都是一列到多列

    • 从上面的比喻来说,X是成绩单一门课程的成绩或者多门课程成绩,Y也是一门课程的成绩或者多门课程的成绩
    • t[X] = x时: xR中的象集为:Yx = {t[Y] | t 属于 R, t[X] = x}
    • 公式比较难懂,但是其实本身很简单也十分容易寻找

    如下例:

    3 数学上的运算

    3.1 并运算

    能够使用并运算的两个前提

    1. 两张表格的元一样(两张表格列数一样)
    2. 相同的属性取自同一个域(属性都一样)

    如图,在合并了之后呢,两个原始的表格和合并之后的新表格元数一样(列数一样)

    • 如果两个表之间有重复的元组,并运算会做去重处理,类似于集合的之间的并集

    3.2 差运算

    能够使用差运算的两个前提

    1. 两个表格列数一样
    2. 两个表格的属性都相同

    两个表进行了差运算之后,都仍然是n列

    S-R表:S表中有任意一个元组和R表的一样,S表就去掉这个元组

    R-S表:R表中有任意一个元组和S表的一样,R表就去掉这个元组

    简言之:就是一张表,嫌弃另外一张表,我身上有那里和你一样,我改还不行嘛!

    3.3 交运算

    交运算能够使用的两个前提

    1. 表格的列数相同
    2. 表格的属性都相同

    两个表格进行并运算,就是把两个表格中一样的元素找出来,找出两张表格的共性

    3.4 笛卡尔积(万能运算)

    没有任何使用限制,万物皆可笛卡尔积。

    R表n元关系,k1个元组(k1行,n列)

    S表m元关系,k2个元组(k2行,m列)

    R表S表进行笛卡尔积

    得到一个(m + n)元k1 * k2列的新表,如下:

    两个表进行了笛卡尔积运算之后

    以上就是所有的数学关系代数运算

    4. 关系运算

    整个关系代数的学习需要使用学生课程选课数据库,需要熟悉以下表格:

    4.1 表格简介

    Student表:

    Course表:

    SC表:


    4.2 选择(Selection)

    • 选择也称之为限制
    • 选择是针对的元组进行选择,选择出满足条件的元组

    选出来的结果是一行行的

    4.2.1 选择查询(例1)

    查询全体信息系(IS)的学生所有信息

    1. 信息系在Student表格中有,所有我们的R表的位置是Student

      Student表格的属性集合为{"Sno", "Sname", "Ssex", "Sage", "Sdept"}

    2. 我们需要的条件是F(Sdept = IS)

    所以题目的答案为:

    查询出来的结果为:

    4.2.2 选择查询(例2)

    查询年龄小于20岁的学生所有信息

    1. 年龄在Student表格中存在,所以我们现需要查询的表格为Student表格
    2. 我们需要的条件是年龄小于20岁F(Sage < 20)

    所以题目的答案为:

    查询出来的结果为:

    4.2.3 选择查询(练习题)

    1. 查询性别为女生的学生信息
    2. 查询学分等于四分的课程信息
    3. 查询CS系的学生信息

    总结:选择运算是查询符合条件的行


    4.3 投影(Projection)

    我们可以看见,使用选择运算的时候,一行的所有全部信息我们都获取了,比如我查询了小于20岁的学生信息,我连学生的名字,学号,性别所有的信息都知道了,因为选择是选择出一行一行的结果,那么如果我只想知道小于20岁的学生名字,其他学号,学院等等的信息我都不想知道

    这里就需要投影运算

    投影运算是针对属性进行选择的运算,也就是投影是选择出符合条件的一列,并且会自动取消某些行(后面会举例说明)

    4.3.1 投影查询(例1)

    查询学生的姓名和学生的系,从需要查询的这个条件可以看出来我们需要查询的是姓名列和学生所在系列

    1. 学生的姓名和所在系在Student表格中,所以我们需要在Student表格中进行查询
    2. 需要查询的属性为学生的姓名和学生的系

    题目的答案为:

    Sname 和 Sdept之间用逗号分隔

    最终我们查询获取的答案如下:

    4.3.2 投影查询(例2)

    查询学生表Student中有那些系

    1. 首先,我们需要在Student表中进行查询
    2. 我们需要查询的属性为系

    题目答案为:

    可是我们最终查询出来的答案应该是什么样子的呢?

    图中演示的就是选择运算的自动去重功能

    总结:投影查询得到的是一列

    4.3.3 选择和投影配合使用(重点)

    选择查询是挑选出符合条件的行,投影查询是选择想要的列,那么如果想定位到一个具体的属性,就需要两种查询方式一起使用。

    如图:

    当我们需要全体数学学院的学生姓名,注意,只需要学生的姓名,其他的信息都不需要。

    • 先用选择运算将所有的数学学院的学生挑选出来

    选择运算的基础上,把需要符合条件的姓名通过投影运算查询出来

    全体数学学院的学生的姓名(交叉区域):言小白,李白。


    4.4 连接(Join)

    连接的含义:从两个关系的笛卡尔积中选择属性之间满足一定关系的元组

    解释:在两张表的笛卡尔积后得到的那张大表中再次选取一些符合我们条件的元组

    多种符号:不同的连接方式对应的符号也有一些细微的差别

    4.4.1 一般连接(例题)

    一般连接就是条件连接,需要将两个表格按照条件连接起来

    第一步:

    第二步:

    第三步:

    因为所有需要挑选的元组都挑选完毕,所以最终的结果如下图

    4.4.2 等值连接

    等值连接是一种特殊的一般连接

    • 两个表需要有相同的属性列

    下面通过具体的题目来进行了解

    第三步:

    最终的结果为:

    4.4.3 自然连接(特殊的等值连接)

    自然连接是一种特殊的等值连接

    这里我们发现了等值连接的一个缺点,R.B和S.B属性是相等的,而我们只需要其中一列就可以,所以R.B和S.B属性只需要保留任意一列就可以了。

    换句话说,等值连接因为属性重复而造成了额外的空间浪费,所以我们需要使用自然连接来解决这个问题(去掉重复的列)。

    4.4.4 外连接

    我们从自然连接中又发现了一个问题,如下图:

    图中标记为红色的地方:

    在做等值连接时由于彼此之间没有对应的元组(彼此之间特有的元组,我有的你没有,或者你有的我没有,这种情况肯定不会相等),在自然连接和等值连接的时候都会被丢弃,这种连接叫做内连接

    而有时候我们需要保留一张表中这种特有的元组,这些元组不能被丢弃,所以需要使用与内连接相反的连接——外连接解决特有的元组被丢弃的问题

    外连接:把R表和S表被丢弃的元组捡了回来,并且在最终连接的表中没有的值用NULL替代,最终结果如下

    • 左外连接:因为R表在左边,所以最终的结果只保留R表中被丢弃的特有元组S表的特有元组仍然丢弃
    • 右外连接:因为S表在右边,所以最终的结果只保留S表中被丢弃的特有元组R表的特有元组仍然丢弃

    4.4.5 例题

    很多时候需要查询的数据分布在两个表格甚至多个表格中,使用连接将表格连接在一起进行查询是十分常用的操作

    有表格信息如下:

    一、查询所有学生的学号,姓名,课程号以及成绩

    • 需要查询的信息分布 S 表和 SC 表中
    • 两张表拥有相同的属性,即Sno,所以连接条件就是 S.sno = SC.sno

    答案:

    当然,使用自然连接也是正确的,自然连接会自动找到相同的属性,并且默认条件就是相同属性的值相同,自然连接就是特殊的等值连接

    二、查询CS系的学生的学号,课程号,以及成绩

    • 需要查询的信息分布在 S 表和 SC 表中
    • 两张表相同的属性是 Sno,所以依靠 Sno 将两张表连接
    • 需要对连接后的表格进行选择,条件是 Sdept = ‘CS’

    答案:

    其实这道题可以再优化一下

    因为我们只需要 S 表中属于CS系的,没必要将 S 表的所有系的学生都和 SC 表连接起来
    所以可以先把 S 表中 CS 系的学生挑选出来,然后再进行连接操作。

    优化后的答案:

    很明显优化后的结果挑选速度更快,占用空间更小。


    4.5 除运算

    一些学习上的感悟:除运算在关系代数中是一个十分强大的工具,但是除法运算的定义看起来十分的晦涩难懂,可定义又是十分重要的,相信很多人在看教科书的过程中,每次看定义这块的时候都会很懵,然后看了例子之后就会理解定义的意思,但是懂了定义的大意之后很少就会有人再回头去理解定义,例子固然是用来让我们可以清晰的理解定义的大意的,但是我们通过例子理解定义的大意之后,我们仍然要回归定义,只有这样我们才能学得深入(个人对于学习上的一些理解,欢迎一起交流)

    4.5.1 除运算基本概念

    假设我们手里面有一张数据库如下:

    现在我们有一个问题,就是我们想要找出学习最积极的那位学生,也就是选修了所有课程的那个学生,先暂时放弃除法运算,以我们最朴素的情感用自己的逻辑来解决这道题目,按照自己的想法,就像设计一个程序一样,需要几步做出这个问题

    以下是按照我自己的想法:

    • 首先,把SC表拆了,把每个学生单独做成一个表,如下:

    • 然后问题就变成了拆开之后的表格和C表一一比对,找出拆开之后的三个表格中的Course属性和C表一模一样(也就是拆开之后包含了所有课程的表),然后找出那个人是谁,然后问题就解决了

    实际上,我们的除法运算就是这个逻辑,但是除法运算的更为严谨,以下是除法运算的的步骤(SC ÷ C),这里我们仍然采用我们上面使用的数据库,直接说结论(SC ➗ C)能找出答案

    • 第一步:找出C表中和SC表中相同的属性,也就是C属性,对C属性做投影操作(也就是找出总的课程有多少门)

    • 第二步:找出SC表中和C表不相同的属性,也就是S属性,也对S属性做投影操作(找出一共有几个学生)

    • 第三步:找出SC表中S的象集(每个学生分别都选了些什么课)

    • 最后一步就是进行比对,只有张三的象集包含了所有C表中的所有课程,所以(SC ➗ C = 张三)

    简单的总结,当需要查询选取所有课程的学生的名单时

    • 需要获取所有的课程到底是那些课程,所以对C表进行投影
    • 需要获取选课的学生有那些,所以需要对SC表的S进行投影
    • 需要知道每个学生都选择哪些课程才能知道那个学生全选了课程,所以还需要的数据是SC表中,S的象集
    • 最后,需要进行比对操作,看看那个学生的象集包含了C表的投影

    除法运算像一个函数,封装了以上的所有功能,我们调用这个函数的时候,把正确的参数放进去,就可以得到我们想要的答案

    4.5.2 例题

    S表 :

    C 表:

    SC 表:

    题目如下:

    查询选修了所有课程的学生姓名,年龄

    1. 对 C 表进行投影,找出所有的课程编号
    2. 用 SC 表 C表,找出选了C表中所有课程的学生
    3. 将符合条件的学生的姓名和年龄找出来

    答案:

    其中,第2步的除法运算详细过程如下:


    当我们看完结论,做完题目,再回头看定义,除法运算的定义如下:

    反复多理解几次,也想用自己的话解释定义,但是定义太抽象了,不举例很难说清楚。

    ……只可意会不可言传……如果使用例子无非把上面的例子再说一遍。

    这里使用其他博客的对于除法运算的总结:RS÷S的意义就是:“在R和S的联系RS中,找出与S中所有的元组有关系的R元组”,这篇博客地址为:关系代数除法运算

    ❤️完结撒花❤️


    2021/5/24:特别鸣谢ai_leilei指出本文错误之处,现已修改!

    展开全文
  • 关系数据库——关系代数

    千次阅读 2021-04-05 10:56:41
    文章目录关系数据库关系代数关系代数的分类及其运算符传统的集合运算专门的关系运算 关系数据库 关系代数 ...按表达查询的方式不同,关系运算可分为关系代数和关系演算两大类 关系代数的分类及其运算符
  • 关系模型关系代数

    2021-05-18 14:49:51
    前言:理解关系型数据库,需要了解关系代数关系模型)。 一、关系代数是什么: 关系代数是以关系为运算对象的一组高级运算的集合。 关系定义为元数相同的元组的集合。 集合中的元素为元组,关系代数中的操作可...
  • MySQL基础 关系代数

    2021-01-18 21:15:31
    MySQL基础 -- 关系代数关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的结果。所以运算对象、运算符、运算结果是运算的三大要素。按...
  • 就像高中代数由+-*/和数字组成,关系代数是由union、intersection、join等运算符和关系实例组成的。关系代数有五个基础运算符,这五个基础运算符能派生出其他组合运算符。它们分别是:选择(σ, selection)、投影(π...
  • 对银行数据库模式: branch (b_no,b_name, address, city, assets) customer (account_no,c_name, street, city) transaction (account_no, t_date,t_time, t_type, amount, b_no) 分别为营业点表,客户表,客户的...
  • 大于(>)、大于等于(≥)、小于()、小于等于(≤)、等于(=)、不等于(≠)逻辑运算符:非(¬)、与(∧)、或(∨)2、五种基本的关系代数运算并(Union):关系R与S具有相同的关系模式。关系R与S并由属于S的元组构成的集合。记...
  • 第二章:关系模型和关系运算理论
  • 关系数据库关系数据模型关系是一个数学概念。当把关系的概念引入到数据库系统作为数据模型的数据结构时,既有所限定和也有所扩充。关系的数学定义例:课程={离散,C语言…..},学生={张三,李四…..}笛卡儿积...
  • 以及交, 连接和关系除等扩展操作, 是一种集合思维的操作语言. 关系代数运算的特点 关系代数操作以一个或多个关系为输入, 结果是一个新的关系. 关系代数操作: 集合操作和纯关系操作 集合操作 纯关系操作 并...
  • 数据库-关系代数

    2021-03-13 16:54:34
    数据库-关系代数白玉 IT哈哈(1)基本概念① 属性和域:每个事物有很多属性,每个属性对应的取值范围叫做域,所有对域都是原子数据(第一范式)② 相关名词n元关系:R(D1,D2,D3...Dn)是n元关系,其中关系属性的个数称为...
  • C语言 关系运算与关系代数关系数据库模型;关系数据模型概述关系数据模型的结构关系数据模型的完整性规则关系代数关系演算;1. 关系数据模型的数据结构 2. 关系数据模型的操纵(运算)3. 关系数据模型的完整性约束 ;关系...
  • 1.关系R与关系S只有一个公共属性,T1是R与S做θ连接的结果,T2是R与S自然连接的结果,则下列说法正确的是___A____ A. T1的属性个数大于T2的属性个数 B. T1 的属性个数等于T2 C. T1的属性个数小于...
  • MySQL基础 -- 关系代数

    2021-02-02 05:16:23
    MySQL基础 -- 关系代数关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的结果。所以运算对象、运算符、运算结果是运算的三大要素。按...
  • 计算机二级:关系代数运算计算机二级:关系代数运算 作者: 日期: 公共基础专题探究一一关系代数运算 序高频考点 号 1自然连接一种特殊的等值连接它要求两个关系中进行比较的分量必须是 相同的属性组,并且在结果中把...
  • 贝尔梅尔娜美2019.03.15采纳率:60%等级:39已帮助:91565人数据库系统的基本概念数据:实际上就是描述事物的符号记录。数据的特点:有一定的结构,有型与值之分,如...数据库存放数据是按数据所提供的数据模式存...
  • 数据库基础数据库介绍数据模型概念模型逻辑模型关系型数据库 写下博客用于自我复习、自我总结。 如有错误之处,请各位指出。 本数据库系列专栏,文章的重心将会是总结SQL语句的使用,而不会涉及到太多数据库本身或...
  • 关系代数考试链接:关系代数在笔试考试中出现的机率为30%,主要是以选择题的形式出现,分值为2分,此考点重点掌握理解内容,读者应该理解关系模型的基本操作以及关系代数的几种运算。误区警示:当对关系模型进行查询...
  • 公共基础专题探究——关系代数运算序号高频考点1自然连接:一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉自然连接满足下面的条件:①两关系间有公共域;...
  • (三)关系代数1.关系模型的基本操作关系是由若干个不同的元组组成的,因此关系可看作元组的集合。N元关系是一个n元有序组的集合。设有一个n元关系R,它有n个域,分别是D1、D2、……、Dn,此时,它们的笛卡尔集是:...
  • 关系代数——除运算

    千次阅读 2020-12-29 16:32:34
    第一步:找出关系R和关系S中相同的属性,即Y属性。在关系S中对Y做投影(即将Y列取出);所得结果如下 Y Y1 Y2 第二步:被除关系R中与S中不相同的属性列是X ,关系R在属性(X)上做取消重复值的投影为{...
  • 文章目录前引第四章课后习题 前引 真的感觉又有点回到计算机网络的感觉了 那个时候我也是发这种博客整理 要不就是资料整理 要不就是课后...1、如下列表所示,两个关系R1R2,它们进行______运算后可以得到R3 A.
  • 关系数据库-关系代数-数据库习题

    千次阅读 2021-07-12 22:40:07
    关系代数是一种抽象的查询语言,关系代数运算的特点是( )。 A. 运算对象结果都是元组 B. 运算对象是元组,运算结果是关系 C. 运算对象结果都是关系 D. 运算对象是关系,运算结果是元组 正确答案: C 关系操作...
  • 数据库 关系代数

    2021-10-21 14:10:23
    关系模型源于数学,关系是由元组构成的集合,可以通过关系的运算来表达查询要求 关系代数是关系操作语言的一种传统的表示方式,它是一种抽象的查询语言 关系代数的运算可分为两大类: 传统的集合运算: 广义...
  • 关系代数中的除法

    2021-03-14 17:51:13
    在介绍关系代数的除法以前我们必须熟悉象集的概念 象集 给定一个关系R(X,Z),X Z 为属性组。当 t[X] = x 时,x 在 R 中的象集(Images Set)为: Zx= { t[Z] | t R,t[X] = x},表示R中属性组X上值为x的诸元组...
  • 关系代数的运算符有两类:集合运算符专门的关系运算符 传统的集合运算是从关系的“水平”方向即行的角度进行 专门的关系运算不仅涉及行而且涉及列 传统的集合运算 并(Union) RS 具有相同的目n(即两个关系都...
  • 重点:关系代数、sql语句 关系模型关系代数 概览sql语句 sql语句–复杂查询

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,277
精华内容 17,310
关键字:

关系代数和关系模型