首页 > 数据库 >数据库入门之关系代数

数据库入门之关系代数

时间:2024-08-26 10:47:36浏览次数:13  
标签:关系 属性 入门 sno 数据库 元组 student 代数 运算

关系代数是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。关系代数的运算对象是关系,运算结果亦为关系。关系代数用到的运算符包括四类:集合运算符、专门的关系运算符、算术比较符和逻辑运算符比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的,所以按照运算符的不同,主要将关系代数分为传统的集合运算和专门的关系运算两类。

传统的集合运算

传统的集合运算是二目运算,包括并、交、差、广义笛卡尔积四种运算。

⒈并(Union)

设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,则关系R与关系S的并由属于R且属于S的元组组成。其结果关系仍为n目关系。记作:
R∪S={t|t∈R∨t∈S}

2. 差(Difference)

设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的差由属于R而不属于S的所有元组组成。其结果关系仍为n目关系。记作:
R-S={t|t∈R∧t∉S}

3. 交(Intersection Referential integrity)

设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的交由既属于R又属于S的元组组成。其结果关系仍为n目关系。记作:
R∩S={t|t∈R∧t∈S}

4. 广义笛卡尔积(Extended cartesian product)

这里的笛卡尔积严格地讲是广义笛卡尔积(Extended Cartesian Product)。在不会出现混淆的情况下广义笛卡尔积也称为笛卡尔积。
两个分别为n目和m目的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1×k2个元组。
记作:
R×S={(t_r t_s ) ?|t_r∈R?t_s∈S}

专门的关系运算

专门的关系运算(Specific relation operations)包括选择、投影、连接、除等。
举个例子,建立一个学生选课系统,建立三张表:
学生表(studnet):学号(sno)、姓名(sname),性别(ssex),年龄(sage)、系别(sdept)
课程表(course):课程号(cno)、课程名(cname)、先行课程号(cpno)
成绩表(score):学号(sno)、课程号(cno)、成绩(grade)

1. 选择(Selection)

选择又称为限制(Restriction)。它是在关系R中选择满足给定条件的诸元组,记作:
σF(R) = {t|t∈R ∧ F(t)='真'}
[例1] 查询信息系(IS系)全体学生
σsdept='IS'(student)
[例2] 查询年龄小于20岁的学生
σsage<20(student)
[例3] 查询信息系年龄小于20岁的学生
σsdept='IS' ∧sage<20(student)
★∧ 逻辑与
★∨ 逻辑或

注:选择运算是从行的角度进行的运算

2. 投影(Projection)

关系R上的投影是从R中选择出若干属性列组成新的关系。记作:
πA(R) = { t[A] | t∈R }
其中A为R中的属性列。
[例1] 查询学生的姓名和所在系
πsname,sdept(student)
[例2]查询学生关系Student中都有哪些系
πsdept(student)
[例3] 查询CS系的学生姓名
πsname( σsdept='CS'(student) )
[例4] 查询没有选过课的学号
思路:所有学生号-选过课的学生号
πsno(student)-πsno(score)
[例5]查询没有不及格的学号
思路:所有学号-有不及格的学号
πsno(student)-πsno( σgrade<60(student) )
[例6]查未被选修的课号
所有课号 - 被选修的课号
πcno(course)-πcno(score)
连接包括θ连接,自然连接,外连接,半连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。

注:投影操作主要是从列的角度进行运算。

3. 连接(Join)

连接包括θ连接,自然连接,外连接,半连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
连接运算从R和S的笛卡尔积R×S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系θ的元组。
连接运算中有两种最为重要也最为常用的连接,一种是等值连接(equi-join),另一种是自然连接(Natural join)。
θ为“=”的连接运算称为等值连接。它是从关系R与S的笛卡尔积中选取A、B属性值相等的那些元组。
自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。
一般的连接操作是从行的角度进行运算。但自然连接还需要取消了重复列,所以是同时从行和列的角度进行运算。

[例 1]查询有成绩>95的学号,姓名
分析:成绩在SC表中, 姓名在STUDENT表中,如果有一张大表,有学号、姓名、成绩 就好了,自然连接STUDENT和SC即可。
πsno,sname( σgrade>95(student)⋈score)
[例 2] 查询选修了2号课程的学生的学生名。
πsname( σcno='2' (student⋈score) )
[例3] 查询选修了先行课为5号课的课程的学生姓名。
πsname ( πsno,sname (student)⋈score⋈ σcpno='5' (course) )
简单写就是:
πsname( σcpno='5' (student⋈score⋈course) )
[例4] 查询没有选过课的学号,姓名
πsno,sname (student⋈(πsno(student)-πsno(score) )

4. 除(Division)

除法运算是一个复合的二目运算。如果把笛卡尔积看作“乘法”运算,则除法运算可以看作这个“乘法”的逆运算。
给定关系R(X,Y)和S(Y,Z),其中X、Y、Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上的分量值x的像集YX包含S在Y上投影的集合。记作:
R÷S={t_r [X]|t_r∈R?π_r (S)?Y_x}
其中,Y_x为x在R中的像集,x=t_r [X]。显然,除操作是同时从行和列的角度进行运算。
根据关系运算的除法定义,可以得出它的运算步骤:
① 将被除关系的属性分为像集属性和结果属性两部分;与除关系相同的属性属于像集属性;不相同的属性属于结果属性。
② 在除关系中,对像集属性投影,得到除目标数据集。
③ 将被除关系分组。分组原则是:结果属性值一样的元组分为一组。
④ 逐一考察每个组,如果它的像集属性值中包括目标数据集,则对应的结果属性应属于该除法运算结果集。
[例1]  查询至少选修1号课程和3号课程的学生号码
πsno,cno(score)÷πcno( σcno=1∨cno=3 (score) )
[例2] 查询选修了全部课程的学生号码。
πsno,cno(score)÷πcno(course)
扩展:查询选修了全部课程的学生号码和姓名。
πsno,sname( (πsno,cno(score)÷πcno(course) )⋈student )
[例3]查询选修了002同学所选的全部课程的学生号码
πsno,cno(score)÷πcno( σsno='002'(score) )

标签:关系,属性,入门,sno,数据库,元组,student,代数,运算
From: https://www.cnblogs.com/jasonspace/p/18380567

相关文章

  • go连接MySQL数据库并查询数据
    前言要在Goland中连接数据库并查询数据,你可以按照以下步骤进行操作:提示:以下是本篇文章正文内容,下面案例可供参考一、导入所需的数据库驱动程序在你的Go代码中使用import语句导入所需的数据库驱动程序。例如,如果你使用的是MySQL数据库,可以使用以下语句导入MySQL驱动程序......
  • Linux环境下的Mysql数据库入门-基于Centos系统
    关系型数据库:oracle===》收钱,大型的公司msyql===》开源的免费的sqlserver===>微软非关系型数据库:hbase===>大数据‘Redismangdb下载mysql:yuminstallmysqlyuminstallmysql-serverrpm-qa|grep-imysql===》查看数据库有没有安装好servicemysqld......
  • RabbitMQ 入门教程
    RabbitMQ入门教程1.引言RabbitMQ是一个开源的消息代理和队列服务器,实现高级消息队列协议(AMQP)。它能帮助开发者实现应用程序间的解耦、异步处理、流量削峰等需求。2.安装与配置2.1安装RabbitMQ2.1.1Ubuntu```bashsudoapt-getupdatesudoapt-getinstallrabb......
  • RabbitMQ 入门教程
    RabbitMQ入门教程1.引言RabbitMQ是一个开源的消息代理和队列服务器,实现了AMQP0-9-1标准。本教程将指导你如何安装、配置和使用RabbitMQ进行消息传递。2.安装RabbitMQ2.1安装RabbitMQ服务器2.1.1Ubuntu/Debian```bashsudoapt-getupdatesudoapt-getins......
  • 第四章:行为型模式(11种)《Java设计模式宝典:从入门到精通》
      在进入第四章之前,我为大家准备了设计模式专栏的快速访问链接,方便大家随时查阅:《Java设计模式宝典:从入门到精通》专栏目录地址,点击我即可快速访问到所有设计模式的章节,不漏掉一处学习的知识 [点赞]等会儿兄弟们,这篇文章的干货真的是满满的!......
  • 效率神器!一款方便、快捷的数据库文档查询、导出工具!
    大家好,我是Java陈序员。之前给大家推荐过一款简洁好用的数据库表结构文档生成器。永不生锈的螺丝钉!一款简洁好用的数据库表结构文档生成器今天,再给大家介绍一款开源的数据库操作工具,功能更加强大!支持文档导出、SQL查询、代码生成...以及十几种实用的工具!关注微信公众号:【Jav......
  • Redis入门篇 - CentOS 7下载、安装Redis实操演示
    文章记录了在CentOS7上,通过源码的形式,下载安装Redis的操作过程进入要安装Redis的目录cd/usr/local下载源码压缩包wgethttps://download.redis.io/redis-stable.tar.gz#不同版本可能地址不同下载完成后,使用ll命令检查,可以看到下载的压缩包:下载完成后,解压......
  • ROS机器人入门系列(二)实现HelloWorld(c++/python)
    一、实现流程1、创建工作空间2、创建功能包3、编辑源文件4、编辑配置文件5、编译并执行其中,c++和python的差异仅体现在3,4两部,其他流程基本一致。二、创建工作空间和创建功能包的实现2.1 创建工作空间并初始化(1)创建工作空间mkdir-p自定义工作空间名称/src这里......
  • FreeRTOS 快速入门(八)之任务通知
    目录一、任务通知1、基本概念2、优势及限制3、通知状态和通知值二、任务通知的使用1、xTaskNotifyGive/ulTaskNotifyTake2、xTaskNotify/xTaskNotifyWait3、xTaskNotifyAndQuery一、任务通知1、基本概念FreeRTOS从V8.2.0版本开始提供任务通知这个功能,每个任务......
  • MySQL 创建数据库用户并授权
    登录MySQL服务器:首先,你需要以具有足够权限的用户(通常是root用户)登录到MySQL服务器。mysql-uroot-p创建新用户:使用CREATEUSER语句创建新用户,并设置密码。CREATEUSER'newuser'@'localhost'IDENTIFIEDBY'password';这里newuser是新用户的用户名,password是......