当前位置: 首页 > news >正文

DBMS-1.2 关系运算

本文章的素材与知识均来自于李国良老师的数据库管理系统课程。 

  • 关系代数

一.基本关系代数运算

基本关系代数运算包括:选择、投影、并、差、笛卡尔积、重命名。

1.选择(select)

选择运算用于从关系R中获取满足条件的元组。

(1) 𝜎为选择运算符号。R为关系表。

(2)𝑝为选择谓词,由逻辑运算符和 与、或、非 连接的若干原子表达式构成的公式。

(3)原子表达式的形式为:𝑋 𝜃 𝑌。其中X、Y为属性名、常量或函数值。𝜃 为比较运算符,包括:等于、大于、小于、大于等于、小于等于、不等于。

(4)例如:

表示选择关系Student中,Sdept属性为"CS"的学生。

(5)例如:

表示选择关系Student中,Sdept属性为"CS"并且年龄大于等于18岁的学生,和所有Sdept属性为"MA"的学生。

2.投影(project)

投影运算用于从关系R中获取某些列组成新的关系。

(1)A1,A2,...Ak为关系R的属性列

(2)返回R中A1,A2,...Ak属性列上的元组,并去除重复元组。

(3)例如:

表示查询关系Student中,Sdept属性为"CS"的学生的Sno属性和Sname属性。查询结果为:

3.并(union)

并运算用于返回关系R和关系S中元组取并集的结果。

(1)关系R和关系S的属性个数要相同。

(2)关系R和关系S的属性应存在一一对应的关系。

(3)关系R中属性的域应和关系S中对应属性的域相同。

(4)例如:

表示查询关系Student中所有Sage属性为17和18的学生。查询结果为:

4.差(difference)

差运算用于返回在关系R中但不在关系S中的元组集合。

(1)关系R和关系S的属性个数要相同。

(2)关系R和关系S的属性应存在一一对应的关系。

(3)关系R中属性的域应和关系S中对应属性的域相同。

(4)例如:

表示查询关系Student中Sdept属性为"CS"但Sage属性小于18的学生。

5.笛卡尔积(Cartesian product)

笛卡尔积运算用于返回关系R中的元组和关系S中的元组作笛卡尔积的结果。

(1)若关系R中的元组个数为m,关系S中的元组个数为n,则RxS返回的元组个数为mxn。

(2)例如:

6.重命名(rename)

重命名运算用于对关系名和属性名做出修改。

(1)将关系R重命名为关系S。

(2)将关系R中的属性从左往右依次修改为A1,A2,...An。

(3)𝜌𝑆(𝑅) 表示只将关系R重命名为关系S,不修改属性名。

(4)例如:假设关系SC中存在属性Sno、Cno、Grade,则

表示将关系SC重命名为关系StudentCourse,并将其中的Grade属性重命名为Score属性。

二.附加关系代数运算

附加关系代数运算包括:交、连接、赋值、除。

附加关系表达式是由基本关系表达式推导出来的,用于简化表达。

1.交(intersection)

交运算用于返回关系R和关系S中元组取并集的结果。

(1)关系R和关系S的属性个数要相同。

(2)关系R和关系S的属性应存在一一对应的关系。

(3)关系R中属性的域应和关系S中对应属性的域相同。

(4)例如:

表示选择关系Student中,Sdept属性为"CS"并且Sage属性大于等于18的学生。

2.连接(join)

连接运算用于返回关系R和关系S的笛卡尔积运算结果中满足一定条件的元组。

(1)𝑝为选择谓词,由逻辑运算符和 与、或、非 连接的若干原子表达式构成的公式。

(2)连接运算可以用笛卡尔积运算和选择运算来表示。

(3)例如:

表示选择关系Student和关系SC中Sno属性相等的学生。选择结果为:

连接运算是基于笛卡尔积运算,因此返回的结果中,两边的属性都要体现。

3.等值连接(equijoin)

(1)当选择谓词p的比较运算符是"="时,该连接运算即为等值连接。

(2)例如上述的连接例子就是等值连接。

4.自然连接(natural join)

(1)自然连接将连接条件指定为关系R和关系S中所有同名属性作等值连接,因此选择谓词p可省略不写。

(2)例如:

表示选择关系Student和关系SC中所有同名属性值都相等的学生。查询结果为:

(3)自然连接是一种特殊的等值连接。等值连接需要指定作等值运算的两个属性;而自然连接是对所有同名属性都作等值运算。

(4)上述关系Student和关系SC作等值连接的例子中,由于两个关系的同名属性只有Sno,因此等值连接就是自然连接。但是如果两个关系还存在其他同名属性,则此时等值连接不再是自然连接,因为等值连接只指定了一组同名属性Sno,而自然连接要求所有同名属性。

5.左外连接(left outer join)

(1)左外连接就是:在自然连接的基础上,保留左边关系R的所有元组,而对于关系R中那些右边关系S的同名属性没有相同取值的元组,则用空值填充右边关系S中的属性

6.右外连接(right outer join)

(1)右外连接就是:在自然连接的基础上,保留右边关系S的所有元组,而对于关系S中那些左边关系R的同名属性没有相同取值的元组,则用空值填充左边关系S中的属性

7.全外连接(full outer join)

(1)全外连接就是左外连接和右外连接查询结果的并集。

(2)例如:

上述例子中,关系R与关系S做全连接得到的结果还应去重,例子中未作去重,需修正。

8.赋值(assignment)

(1)赋值运算可以将 "←" 右侧的关系代数表达式结果E赋值给 "←" 左侧的关系变量T。

(2)赋值运算用于分解复杂的关系代数表达式,使查询变得简单。

(3)例如:

表示将关系Student和关系SC基于属性Sno作等值连接,并将连接结构赋值给关系变量result。

9.除(division)

除运算会返回关系R中在属性A1,A2,...Am上的元组t,其中元组t和关系S中的任意元组q的组合都会出现在关系R中。

(1)关系R必须包含关系S的所有属性,若关系S存在一个关系R没有的属性,则无法进行除运算。

(2)返回的结果属性是A1,A2,...Am,即关系R中除去与关系S共有的属性。

(3)除运算可以用投影运算和笛卡尔积运算表示:

(4)例如:Student ÷ Course 表示查询选择所有课程的学生。

(5)例如:

关系R中,只有a所在的元组对应的属性B的值,包含了关系S中属性B的所有可能。

三.扩展关系代数运算

扩展关系代数运算包括:去重、广义投影、聚集、分组、排序。

1.去重(remove duplicates)

(1)去重运算用于将关系R中的重复元组去除,并返回去除重复元组后的关系

(2)例如:

表示查询关系Student中所有系的信息。查询结果为:

2.广义投影(generalized projection)

(1)广义投影用于使用算数运算和字符串函数等来对投影运算进行扩展

(2)F1,F2,...Fk为包含常量、变量(关系R中的属性)、运算符、函数等的多个表达式。

(3)例如:

表示查询所有学生的学号、姓名、出生年份(假设当前为2021年)。查询结果为:

3.聚集(aggregation)

(1)聚集运算用于查询关系R按某些属性的值聚集在一起的结果

(2)A1,A2,...Ak为关系R的属性列,F1,F2,...Fk为在属性Ai上的聚集函数,常见的聚集函数包括:count、sum、avg、min、max等。

(3)例如:

表示查询学生总人数。

4.分组(group)
 

(1)分组运算首先对关系R中的元组按照某些属性列的值进行分组,再在各组上作聚集运算

(2)先分组,再做聚集运算

(3)G1,G2,...Gl是用来分组的一些列属性,关系R中那些属性Gi的值相等的元组会被分到同一组。

(4)例如:

表示查询各个系男生和女生的人数。查询结果为:

5.排序(sort)

(1)排序运算用于将关系R中的元组按照一列或多列的值排序

(2)A1,A2,...Ak是用于排序的属性列。先将关系R中的元组按照属性列A1的值进行排序,若A1值相同,则再按A2的值进行排序,以此类推。排序优先级由高到低

(3)例如:

将关系Student按照Sage属性排序,若Sage属性相同,则再按照Sno属性排序。查询结果为:

  • 关系演算

一.元组关系演算

例如:

二.域关系演算

例如:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用Leaflet GeoMan结合天地图进行自由标绘实战
  • 备忘录模式
  • 使用GenAI做Discord舆情分析对游戏运营的帮助
  • 技术学习笔记 1:C++标准库异常类(c++中怎样用自己错误信息交给try catch捕获)
  • 餐饮连锁加盟的网页UI,如果不大气,谁能相信你的品牌力
  • Package.Json 参数配置理解用途
  • C:关于位操作符:、|、^、~的一些应用
  • 百日筑基第三十七天-阿里开发手册编程规约
  • 编程实践|如何用 MoonBit 实现 diff(三)
  • 使用css在照片右上角设置缎带效果
  • 请以零基础学Python 之 第二十讲 分组和贪婪匹配
  • 从新手到高手:Scala函数式编程完全指南,Scala 文件 I/O(27)
  • 【LLM】-10-部署llama-3-chinese-8b-instruct-v3 大模型
  • 类似redmine的项目管理系统有哪些?10款软件测评
  • 基础跟张宇,强化换武忠祥可行吗?会不会漏什么?
  • AHK 中 = 和 == 等比较运算符的用法
  • chrome扩展demo1-小时钟
  • CSS盒模型深入
  • CSS魔法堂:Absolute Positioning就这个样
  • Docker下部署自己的LNMP工作环境
  • extjs4学习之配置
  • java8 Stream Pipelines 浅析
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Java多线程(4):使用线程池执行定时任务
  • REST架构的思考
  • 闭包--闭包作用之保存(一)
  • 服务器之间,相同帐号,实现免密钥登录
  • 回顾2016
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 微信开放平台全网发布【失败】的几点排查方法
  • 最简单的无缝轮播
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​iOS实时查看App运行日志
  • ​补​充​经​纬​恒​润​一​面​
  • #Linux(make工具和makefile文件以及makefile语法)
  • #QT项目实战(天气预报)
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (C)一些题4
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (zhuan) 一些RL的文献(及笔记)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (南京观海微电子)——I3C协议介绍
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原创)可支持最大高度的NestedScrollView
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)甲方乙方——赵民谈找工作
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .chm格式文件如何阅读
  • .htaccess 强制https 单独排除某个目录
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008