【MySQL自学之路】第2天——关系代数计算【理论知识】
目录
前言
基础名词
关系
候选码
关系运算
传统的集合计算(二目运算)
样例表创建【SQL】
专门的关系运算
后记
销毁已经创建的表
前言
在上一节我们提到了关系型数据库和非关系型数据库之间的关系,我们主要以MySQL关系型数据库为主展开。关系模型是建立在集合代数的基础上的,我们从集合论的角度给出关系数据结构的形式化的定义。
注:博客内标蓝色背景的是教材原话,黄色背景的是博主自己理解的加注,绿色背景的为引用。
基础名词
关系
定义:
D1xD2xD3x...xDn的子集叫做在域D1、D2、...、Dn上的关系,表示为 R(D1,D2,...,Dn)
这里R是关系的名字,n是关系的目或者度。
n目关系必有n种属性。
这里的D不是属性,只是R中的元素,属性是D的再分。
例如:R(AB,B,BC),属性是A、B、C
候选码
某一属性组的值能够唯一地标识一个元组,而其子集不能,则称该属性组为候选码。
上句话的意思是关系R里面的每一个属性或者元素都可以用候选码推出。
候选码的属性称为主属性。
不包含在候选码里面的属性称为非主属性。
关系运算
注:每一种关系运算均可以用SQL语句来实现。
传统的集合计算(二目运算)
(1)并
R ∪ S = {t | t ∈ R ∨ t ∈ S}
(2)差
R - S = {t | t ∈ R ∧ t
S}
(3)交
R ∩ S = {t | t ∈ R ∧ t ∈ S}
R ∩ S = R -(R - S)
(4)笛卡儿积
R x S = {tr ts | tr ∈ R ∧ ts ∈ S}
例如:R(a,b) S(c,d)
R x S = {(a, c),(a, d),(b, c),(b, d)}
其中(a,c)等也成为元组,该元组中a、c分别叫做该元组的分量。
样例表创建【SQL】
(1)创建数据库sqlstudy
(2)在数据库sqlstudy下面创建表students
(3)students表内有sno、sname、sage三个字段
(4)现保存两位同学的信息:('123456789','aaa',12),('111111111', 'bbb', 13)
create database sqlstudy;use sqlstudy;create table students(
sno char(9) primary key,
sname char(20),
sage int
);insert
into students
values('123456789','aaa',12);insert
into students
values('111111111', 'bbb', 13);select * from students;
注:这里的SQL不用记,只是方便演示效果,SQL语句后面会逐一讲解。
专门的关系运算
(1)选择
选择又称为限制。它是在关系R中选择满足给定条件的诸元组。
δF(R) = {t | t ∈ R ∧ F(t)='真'}
其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。
例如:查询所有年龄大于10岁的学生。
δ sage > 10 (students)
SQL语句:
select *
from students
where sage > 10;
总结 :
选择是找出满足条件的所有学生的所有信息。 是行查询操作。
(2)投影
关系R上的投影是从R中选择出若干属性列组成新的关系。投影操作是从列的角度进行的运算。
ПA(R) = {t[A] | t ∈ R}
例如:查询学生关系students中都有哪些人(姓名)。
Пsname(students)
SQL语句:
select sname
from students;
总结 :
投影操作是从列的角度进行的运算。
(3)连接
连接也称为θ连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
θ为“=”的连接运算称为等值连接。
自然连接:
两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉。
自然连接是一种特殊的等值连接。
总结:
连接是建立在多张数据库表的基础上。通过连接可以将多张表的数据通过共同的字段进行拼接,且拼接后的表去掉了重复字段的称为自然连接。
SQL语句:
create table homes
(
sno char(9) primary key,
shome char(20)
);insert
into homes
values('123456789','hahaha');insert
into homes
values('111111111', 'xixixi');select *
from homes, students
where homes.sno=students.sno;
以上情况是两个表的数据正好一一对应,如果此时我再向表中再加入一个数据:
insert
into homes
values('222222222', 'lalala');select *
from homes;
此时在做连接:
select *
from homes, students
where homes.sno=students.sno;
注:可以看到新加入的一行数据并没有在连接里面出现,因为students表里面并没有这个学生的信息。 我们把这个被舍弃的元组(一行数据)称为悬浮元组。
悬浮元组:
两个关系R和S在做自然连接时,选择两个关系再公共属性上值相等的元组构成新的关系。此时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了。这些被舍弃的元组称为悬浮元组。
外连接:
如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(NULL),那么这种连接就叫做外连接。
左外连接:
只保留左边关系R的悬浮元组,其他地方写空值。
右外连接:
只保留右边关系S的悬浮元组,其他地方写空值。
注:SQL可以通过outer join on等关键字实现外连接来保留悬浮元组,详细内容会在之后的章节在说明。这里只做大概的说明。
(4)除运算
设关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性以及值,且T的元组与S的元组的所有组合都在R中。
R ÷ S = {tr[X] | tr ∈ R ∧ Пy(S)
Yx}
其中Yx为x在R中的象集
注:
(1)除是同时从行和列角度进行运算的。
(2)交、连接、除均可以用并、差、笛卡尔积、选择和投影这五种基本运算来表达,通常我们在计算除法的时候都会将其转换为基本运算式。
从集合论上进行举例:
A | B | C |
a1 | b1 | c2 |
a2 | b3 | c7 |
a3 | b4 | c6 |
a1 | b2 | c3 |
a4 | b6 | c6 |
a2 | b2 | c3 |
a1 | b2 | c1 |
B | C | D |
b1 | c2 | d1 |
b2 | c1 | d1 |
b2 | c3 | d2 |
A |
a1 |
计算步骤:
(1)找到公共属性列(B、C)
(2)计算关系R里面不是公共属性列(A)的所有取值(a1,a2,a3,a4)。
(3)分别计算步骤(2)得到结果的象集 :
a1象集:{(b1, c2),(b2, c3),(b2, c1)}
a2象集:{(b3, c7),(b2, c3)}
a3象集:{(b4, c6)}
a4象集:{(b6, c6)}
(4)计算S在(B,C)上的投影:{(b1, c2),(b2, c1),(b2, c3)}
(5)因为a1的象集 S在(B,C)上的投影,故结果为a1。
从SQL语句上进行举例:(通过SQL语句实现除法运算会涉及部分新的知识点在后面,可以先看后面的章节,再回来学习SQL的除法运算)
R(X,Y)
S(Y,Z)
select distinct R.X from R R1
where not exists
( select S.Y from Swhere not exists( select * from R R2where R2.X=R1.X and R2.Y=S.Y )
);
后记
销毁已经创建的表
drop table homes;drop table students;
注:这里销毁已经创建的表是为了之后的章节可以独立于之前的章节,避免小伙伴们找不到例题中的表。
【MySQL自学之路】第2天——关系代数计算【理论知识】相关推荐
- 【Python的自学之路】(二):学习python的基础知识
目录 序言 内容 跋文 序言 通过#[Python的自学之路](一)学习python的第一课#之后,我想基本上python环境工具等都安装好了吧,下面我们就先一起来了解了解一下python. 内容 p ...
- 马士兵_JAVA自学之路(为那些目标模糊的码农们)
JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方 ...
- [转]尚学堂科技 - 马士兵老师-JAVA自学之路
[原创 - 尚学堂科技 - 马士兵老师] JAVA自学之路 一:学会选择 [转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_1.html] 为了就业,不少同 ...
- JAVA自学之路 [原创 - 尚学堂科技 - 马士兵老师]
(我觉得看了之后挺不错的所以分享一下) JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3 ...
- JAVA自学之路——马士兵
JAVA自学之路--马士兵 2007年11月06日 星期二 05:47 P.M.[原创 - 尚学堂科技 - 马士兵老师] JAVA自学之路 一:学会选择 [转载请注明出处:http://ww ...
- Java自学之路 - 马士兵
一.学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢? 我的意见是,不 ...
- JAVA自学之路 七:路线图明细
[原创 - 尚学堂科技 - 马士兵老师] JAVA自学之路 七:路线图明细 [转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_7.html] 下面给出第二节 ...
- 零基础 Java 自学之路(2021年最新版)
前言 无论你是否想自学 Java,认真看完本文,你以后的职场生涯至少少走1年弯路. 本文会持续更新,建议收藏. 初衷 在 CSDN 上经常有同学私聊我询问 "如何自学 Java". ...
- 【经验】马士兵Java自学之路——(精华版)
目录 JAVA自学之路 一: 学会选择 2 JAVA自学之路 二: JAVA自学路线图 3 JAVA自学之路 三: 要动手 3 JAVA自学之路 四: 要事为先 4 JAVA自学之路 五: ...
最新文章
- MySQLinnodb_monitor及死锁检测
- 为什么使用JavaScript eval函数是个坏主意?
- 8.3. 测试 opensips
- 第一百零四节,JavaScript时间与日期
- 用少于10行代码训练前沿深度学习新药研发模型
- 北京科技大学计算机专业评估,北京科技大学王牌专业有哪些
- 【caffe-windows】Linux至Windows平台的caffe移植
- java实现鼠标截图,java实现屏幕截图(附源码)
- DTCMS自定义标签,获取所有栏目文章列表TOP,以及文章通用URL
- Flume自定义文件命名格式(RollFileSink)
- HTML 禁用Select下拉框的上下左右键盘按键默认事件
- 百问 FreeSwitch(整理版)
- ArduinoUNO实战-第五章-有源蜂鸣器实验
- 微信“看一看”,“搜一搜”算法大揭秘
- argument 1 must be str, not PosixPath
- 用防火墙可以防御DDoS攻击吗?
- 开源社区“大牛”关于“开源”的大讨论
- NodeJS 之 fs 模块(路径动态拼接问题)
- 实验二《面向对象程序设计》_实验报告
- 了解文件系统调用吗?如何实现的?
热门文章
- 第七周--数据结构--队列数组
- Thumbs.ms\com1.{d3e34b21-9d75-101a-8c3d-00aa001a1652}
- Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)?
- groovy提取时间戳
- This version of the JDBC driver is only compatible with Elasticsearch version 7.9 or newer; attempti
- ESP32 (WIFI)-AP、STA模式(14)
- php unix时间戳,php UNIX时间戳用法详解
- 【大咖有约】1号店周航:1号店搜索实时更新架构实践
- 转载:廖雪峰经典:史上最浅显易懂的Git教程!
- 《Android移动应用基础教程》之Android购物商城