搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
代码探险家
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
【数据】Hive和SQL的区别_hive感觉和sql差不多啊
2
408王道操作系统强化——操作系统大串讲_408串讲
3
Mysql全文搜索match...against的用法 转自:http://dao.daimaku.com_sql against
4
亿信ABI有什么不同,来看最新DEMO演示_亿信演示
5
【Python报错】已解决ValueError: cannot reindex from a duplicate axis
6
河南萌新联赛2024第(二)场:南阳理工学院 E - “好”字符
7
如何用Python Faust构建流数据管道(上篇)_faust python agent
8
Spring核心接口:HandlerMethodArgumentResolver参数解析器
9
【ESP01开发实例】-驱动OLED SSD1306显示屏
10
请求被中止: 未能创建 SSL/TLS 安全通道_未能创建ssltls安全通道
当前位置:
article
> 正文
数据库关系代数表达式学习_数据库关系代数 选择
作者:代码探险家 | 2024-07-31 11:59:49
赞
踩
数据库关系代数 选择
关系代数是关系数据库系统查询语言的理论基础。很有必要学习一下,有些是用代数表达式很方便的东西,用
SQL写出来还是挺麻烦的,并不是想象当中那么直接。
一、关系代数的9种操作:
关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。
五个基本操作:
并(∪)、差(-)、笛卡尔积(×)、投影(σ)、选择(π)
四个组合操作:
交(∩)、联接(等值联接)、自然联接(R
S)、除法(÷)
注2:等值连接表示先做笛卡尔积(×)之后,对相应列进行选择或等值关联后的结果(仅筛选行、不筛选列)
注2:自然连接表示两个关系中若有相同名称的属性,则自动作为关联条件,且仅列出一列
二、关系代数表达式:
由关系代数运算经有限次复合而成的式子称为关系代数表达式。这种表达式的运算结果仍然是一个关系。可以用关系代数表达式表示对数据库的查询和更新操作。
三、举例说明:
设教学数据库中有3个关系:
学生关系S(SNO
,
SNAME,AGE,SEX)
学习关系SC(SNO,CNO,GRADE)
课程关系C(CNO,CNAME,TEACHER)
(1) 检索学习课程号为C2的学生学号与成绩
------------------------------------
SELECT SNO,GRADE
FROM SC
WHERE CNO='C2'
------------------------------------
π
SNO
,
GRADE
(
σ
CNO='C2'
(SC))
************************************
(2) 检索学习课程号为C2的学生学号与姓名
------------------------------------
SELECT SC.SNO,S.SNAME
FROM SC,S
WHERE SC.SNO=S.SNO
AND SC.CNO='C2'
------------------------------------
π
SNO,SNAME
(
σ
CNO='C2'
(S
SC))
此查询涉及S和SC,先进行自然连接,然后再执行选择投影操作。
----
π
SNO,SNAME
(S)
(
π
SNO
(
σ
CNO='C2'
(SC)))
自然连接的右分量为"学了C2课的学生学号的集合"。
此表达式比前一个表达式优化,执行起来要省时间、省空间。
************************************
(3) 检索选修课程名为MATHS的学生学号与姓名
------------------------------------
SELECT SC.SNO,S.SNAME
FROM SC,S,C
WHERE SC.SNO=S.SNO
AND SC.CNO=C.CNO
AND C.CNAME='MATHS'
------------------------------------
π
SNO
,
SANME
(
σ
CNAME='MATHS'
(S
SC
C))
************************************
(4) 检索选修课程号为C2或C4的学生学号
------------------------------------
SELECT SNO
FROM SC
WHERE CNO='C2'
OR CNO='C4'
------------------------------------
π
SNO
(
σ
CNO='C2'∨CNO='C4'
(SC))
************************************
(5) 检索至少选修课程号为C2或C4的学生学号
------------------------------------
SELECT SA.SNO
FROM SC AS SA,SC AS SB
WHERE SA.SNO=SB.SNO
AND SA.CNO='C2'
AND SB.CNO='C4'
------------------------------------
π
1
(
σ
1=4∧2='C2'∧5='C4'
(SC×SC))
************************************
(6) 检索不学C2课的学生姓名与年龄
------------------------------------
SELECT SNAME,AGE
FROM S
MINUS
SELECT S.SNAME,S.AGE
FROM SC,S
WHERE SC.SNO=S.SNO
AND SC.CNO='C2'
(Oracle)
------------------------------------
π
SNAME
,
AGE
(S)-
π
SNAME
,
AGE
(
σ
CNO='C2'
(S
SC))
************************************
(7) 检索学习全部课程的学生姓名
------------------------------------
这个定义用
SQL表示比较麻烦,略过
------------------------------------
π
SNO
,
CNO
(SC)÷
π
CNO
(C)
先用除法取出选取所有课程的
SNO集(除法可以理解为一个Filter)
π
SNAME
(S
(
π
SNO,CNO
(SC)÷
π
CNO
(C)))
再关联
S表取出SNAME
************************************
(8) 检索所学课程包含S3所学课程的学生学号
------------------------------------
这个定义用
SQL表示比较麻烦,略过
------------------------------------
π
SNO,CNO
(SC)÷
π
CNO
(
σ
SNO='S3'
(SC))
同样运用了除法的特性
************************************
(9) 将新课程元组
(
'C10','PHYSICS','YU'
)
插入到关系C中
------------------------------------
INSERT INTO C VALUES('C10','PHYSICS','YU')
------------------------------------
(C
∪
('C10','PHYSICS','YU'))
记住该符号的用法
************************************
(10) 将学号S4选修课程号为C4的成绩改为85分
------------------------------------
UPDATE SC SET GRADE=85
WHERE SNO='S4'
AND CNO='C4'
------------------------------------
(SC
-
('S4','C4',
?
)
∪
('S4','C4',85))
先用'
-
'实现DELETE功能,再用'∪'实现INSERT功能
注意使用?来表示检索时忽略该字段值
************************************
四、关系代数表达式的优化:
目的
:为了系统在执行时既省时间又能提高效率。
基本策略
:先做选择,运用投影去除多余属性等等。
优化算法
:语法树
(
尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值
)
例如:
π
S
NO
,SNAME
(
σ
GRADE>60
(S
SC))
进行
优化后转换为:
π
S
NO
,SNAME
(
π
S
NO
,SNAME
(S)
π
S
NO
(
σ
GRADE>60
(SC)))
--即提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值
又如:
S(S#,SNAME,AGE,SEX)
SC(S#,C#,GRADE)
C(C#,CNAME,TEACHER)
π
CNAME,TEACHER
(
σ
SEX='女'
(S
SC
C))
进行
优化后转换为:
π
CNAME
,
TEACHER
(C
π
C#
(
π
S#,C#
(SC)
π
S#
(
σ
SEX='女'
(S))))
优化前和优化后的语法树如下所示:
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/代码探险家/article/detail/908739
推荐阅读
article
Could
not
get
an
y
response
postm
an
报错 但是浏览器可以访问_cou...
答案在最后一张图片案例分析把postm
an
报错的信息复制再这里,你去翻译一下Could
not
get
an
y resp...
赞
踩
article
HR
面试题
(
史上
最全
、
持续
更新、吐血推荐)_
hr
岗位
面试题
...
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源:疯狂创客圈 经典图书 : 《Netty Zo...
赞
踩
article
git
最详细
的
分布式
版本控制
工具使
用
攻略_
git
版本控制
工具怎么
用
...
选择新建仓库–>填充仓库名称–>填充介绍–>选择开源–>选择创建这样,等真
的
沉下心来学习,不至于被找资料分散了心神。另外...
赞
踩
article
【发
邮件
】
SpringBoot
通过
hutool
方式
发送
邮件
_
hutool
exchange
...
【发
邮件
】
SpringBoot
通过
hutool
方式
发送
邮件
本文项目效果:
发送
html格式的验证码,并把验证码缓存到...
赞
踩
article
大
数据
可
视化
大屏
实战
项目
(
57
)
可
视化
监控
管理---
HTML
+CSS+JS【源码在文末】(
可
用
于比赛...
大
数据
可
视化
大屏
实战
项目
(
57
)
可
视化
监控
管理---
HTML
+CSS+JS【源码在文末】(
可
用
于
比赛
项目
或者作业参考中
用
...
赞
踩
article
Linux
最全等保测评
linux
主机整改
_
no
_
magic
_
root
(1),2024年最新看完豁然开...
本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了
Linux
的基础应用、系统管理、网络应用、娱乐...
赞
踩
article
Git
-
分布式
版本
控制
工具_
分布式
版本
工具...
Git
一、
Git
与SVN的主要区别?SVN 是集中式
版本
控制
系统,
版本
库是集中放在中央服务器的,而工作的时候,用的都是自...
赞
踩
article
京东8年资深架构师
为
你
解析
:
Kafka
源码
解析
实战。
为
你解忧_
kafka
源码
解析
与实战
pdf
...
我们在 linux 上查看内存的时候,经常可以看到 buff/cache,两者都是用来加速 IO 读写用的,而 cach...
赞
踩
article
rust
实战系列
一百零二
:
Unsafe
_
rust
全局变更
unsafe
...
intrinsic函数,很多都是
unsafe
的,再比如调用extern函数必须在
unsafe
中实现。有
unsafe
修饰的...
赞
踩
article
cJSON
的使用_
cjson
使用...
cJSON
的使用_
cjson
使用
cjson
使用 文章目...
赞
踩
article
Kafka
源码
解析与实战...
Kafka
的架构包括
Kafka
的基本组成,
Kafka
的拓扑结构以及
Kafka
的内部通信协议。
Kafka
内部的通信协议是建...
赞
踩
article
Flutter
开发——从
入门
到精通教程,姥姥都能学会!_
flutter
dart
语言
编程
入门
到精通...
自定义组件方法简介组合现有组件组合实例:TurnBoxCustomPaint与Canvas自绘实例:圆形渐变进度条自绘组...
赞
踩
article
jupyter
notebook
默认
打开
路径设置_
jupyter
notebook
修改
默认
打开
位置...
对更改
jupyter
notebook
的
默认
打开
路径设置进行记录。_
jupyter
notebook
修改
默认
打开
位置ju...
赞
踩
article
leetcode94
.
二叉树
的
中序
遍历...
1.题目描述:给定一个
二叉树
的根节点root,返回它的
中序
遍历。2.递归
中序
遍历:/** * Definition fo...
赞
踩
article
jupyter
里
import
问题
汇总(含
tensorflow
)
_
jupyter
import
...
文章目录
问题
记录
问题
一:修改
jupyter
默认打开目录
问题
二:anaconda中
jupyter
无法
import
已安装的p...
赞
踩
article
信息
泄露与
大
数据
:隐私
安全
的
挑战与对策_
大
数据
保密管理面临
的
新挑战...
信息
泄露与
大
数据
是一个复杂且不断发展
的
问题,我们需要共同努力来解决这个挑战。_
大
数据
保密管理面临
的
新挑战
大
数据
保密管...
赞
踩
article
从斐波
那契
数列
理解
动态
规划
_斐波
那契
数列
动态
规划
...
一提到
动态
规划
,大多数人都想到许许多多高端的名词,如什么状态转移方程什么的;要不就想到教材书上严谨而又晦涩难懂的对于
动态
...
赞
踩
article
企业代码版本
管理
之争:
TrunkBased
vs
GitFlow
vs
AoneFlow
vs On...
文章目录引言
TrunkBased
GitFlow
AoneFlow
OneFlow
ExeFlow
综述引言网络上版本
管理
系统之争...
赞
踩
article
Jupyter
notebook
无法自动关联
打开
浏览器
,怎么办?_
anaconda
安装后启动jupy...
Jupyter
notebook
打开
之后一直停在命令行界面不动,
浏览器
也没有如预期般的自动弹出来,怎么解决的?来看看吧...
赞
踩
article
解决
postman
请求
不到
https
的数据问题...
打开
postman
中的设置将SSL这一项关闭即可
解决
postman
请求
不到
https
的数据问题 ...
赞
踩
相关标签
postman
Could not get any response
但是浏览器可以访问
git
分布式
spring
spring boot
redis
swagger2
信息可视化
html
css
javascript
前端
linux
网络
服务器
kafka
rust
开发语言
后端
cJSON
大数据
java