-
更多相关内容
-
数据库 元组演算表达式
2021-01-21 14:34:59之前学习了一下关系代数表达式,现在再学习一下元组关系的演算,这样就全了。这篇东西的符号打出来费了好多时间,比较麻烦,还好看着还能看懂,关键是全文本的,好下面开始正文。 为了讨论方便,先允许关系的基数是... -
① 数据库介绍 及 关系型数据库的关系代数表达式
2020-12-20 22:54:51数据库基础数据库介绍数据模型概念模型逻辑模型关系型数据库 写下博客用于自我复习、自我总结。 如有错误之处,请各位指出。 本数据库系列专栏,文章的重心将会是总结SQL语句的使用,而不会涉及到太多数据库本身或...查看专栏更多内容:
② 关系数据库标准语言SQL 数据定义(创建、修改基本表)、数据更新(增删改)
相关实战:
写下博客用于自我复习、自我总结。
如有错误之处,请各位指出。
本数据库系列专栏,文章的重心将会是总结SQL语句的使用,而不会涉及到太多数据库本身或大数据的内容。除此以外,使用的SQL语句会因为MySQL或Oracle的不同,导致一些使用上的差异,这部分具体的区别将不作区分。在之后的文章中将会使用MySQL数据库。对于MySQL和Oracle的区别,百度一下此类文章很多。
对于下载MySQL数据库,可以参考我之前的文章:uni-app 发送网络请求。该文章里提到了,如何使用phpstudy去下载MySQL和SQL_Front,并且写了简单创建接口去连接数据库的例子,感兴趣的可以了解一下。而为了能够满足自己写些小项目的需求,总结基本的SQL语句就提上了日程,因为不可能所有逻辑都是简单的增删改查。
数据库介绍
在网络发展如此迅速的今天,信息资源无处不在,而如何有效管理、组织、存储这些数据,将会直接影响各企业或组织的效益。现在要说的数据库(Database)就是处理这些问题的工具。
不过在具体说到数据库之前,我们先了解一下数据模型。
数据模型
数据模型是数据库系统的核心和基础,因为我们要做的就是把现实世界数据的特征抽象出来,而在开发实施数据库应用系统中就涉及到了几个不同的数据模型:概念模型、逻辑模型和物理模型。
这几个模型都是必不可少的,简单叙述一下:
- 概念模型:主要用于数据库设计;
- 逻辑模型:主要用于数据库管理系统的实现;
- 物理模型:描述数据在系统内部的表示方式和存取方法,它是对数据最底层的抽象。
用过多言语叙述它们显然不是我们的重点,我们现在就直奔主题,把里面涉及到的概念列举出来。
概念模型
在信息世界中主要会涉及以下概念:
(1)实体(entity)
实体:客观存在并可相互区别的事物。比如:一个学生、一个员工、一门课
(2)属性(attribute)
属性:实体所具有的某一特性。当然一个实体可以有若干个属性。比如:学生的学号、姓名、班级
(3)码(key)(主键 、 码键)
码:唯一标识实体的属性集,又或者说成:可以区分实体的最小属性组。比如:学生可以只用一个属性学号来区分,当然也可以用 姓名 + 班级 + … 等组合起来的属性集(组)来判断。
码是个很关键的概念,我们之后还会对其相关用法进行说明。
(4)实体型(entity type)
实体型:用实体名及其属性名集合来抽象和刻画同类实体。比如: 学生(学号,姓名,性别,出生年月,班级)
(5)实体集(entity set)
实体集:同一类型实体的集合。比如:全体学生
(6)联系(relationship)(关系)
联系:不同实体集之间的联系。这个联系分为一对一、一对多和多对多等。
联系也是个很关键的概念,这将是往后重要的逻辑关系(在项目中通常会有专人来负责产品的数据库设计)。
首先先来感受一下这些联系的概念:
① 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系。
② 如果对于实体集A中的每一个实体,实体集B中有n个实体(n ≥ 0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B具有一对多联系。
③ 如果对于实体集A中的每一个实体,实体集B中有n个实体(n ≥ 0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m ≥ 0)与之联系,则称实体集A与实体集B具有多对多联系。
举个例子感受一下:
① 一个老师只教这一门课,这门课又只由这名老师教,这就是一对一。
② 一个老师能教很多门课,而这些课又只由这一名老师教,这就是一对多。
③ 一个老师能教很多门课,同时这些课也会由多名老师教,这就是多对多。
接下来我们看另一个概念:
因为概念模型,它就是对信息世界的建模,所以它就应该有办法能够方便、准确地表示出上述常用概念,而表示它们的方法很多,最为常用和直观的是 实体-联系方法(Entity-RelationShip approach)(即:E-R图)。简单来说,这个E-R图就会包括实体、属性、实体之间的联系。
一篇文章了解ER图:数据库ER图基础概念整理
这部分内容实际上也很重要,因为ER图可以很好的展现项目数据需求,但这并不是我们要说的重点,我们继续回到正题。
逻辑模型
在数据库领域主要的逻辑数据模型有很多,在这里简单介绍一下层次模型。
层次模型是数据库系统中最早出现的数据模型,它用树形结构来表示各类实体以及实体间的联系。
感受一下:
它的优缺点很明显:(1)层次模型的数据结构简单清晰。
(2)层次数据库的查询效率高。
(3)查询子女结点必须通过双亲结点,如果一个结点具有多个双亲结点,代码编写将十分复杂。其他的模型就不在这里叙述了。这种类似的模型虽然可以很直观地描述,具有良好的性能,但是随着数据的增多,应用环境的扩大,这种结构一定会变得越来越复杂,不利于管理人员的掌握。
因此,接下来要说的就是MySQL采用的关系模型。MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
关系型数据库
所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成。
在继续学习 MySQL 数据库前,先叙述一些概念:
-
数据库: 数据库是一些关联表的集合。
比如:上图中,school就是一个数据库,它里面有三个相关数据表。 -
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
-
列(属性): 一列(数据元素) 包含了相同类型的数据。
-
行(元组、记录):一行是一组相关的数据。
-
主键(码、码键):主键是唯一的。一个数据表中只能包含一个主键,这个主键可能是某一属性也可能是某个属性组,它可以唯一确定一个元组(行)。你可以使用主键来查询数据。
还有很多概念将会在之后用到的时候再说明。
关系数据结构
首先,先来介绍一下关系模型的数据结构。它的数据结构非常简单,只包含单一的数据结构——关系,也就是那一张张扁平的二维表。
在这里简单叙述一下关系数据结构的形式化定义。
(1)域:域是一组具有相同数据类型的值的集合。比如:自然数、整数、实数、{ 男,女 }、大于0且小于50的正整数。
(2)笛卡儿积:笛卡尔积是域上的一种集合运算。
它的完整定义是:给定一组域D1,D2,··· , Dn,允许其中某些域是相同的,D1,D2, ··· ,Dn的笛卡尔积为:
D1 x D2 x ··· x Dn = {(d1,d2,···,dn)| di ∈ Di,i = 1,2,···,n}
其中,每一个元素(d1,d2,···,dn)叫作一个n元组,或简称元组。元素中的每一个值 di 叫做一个分量。一个域允许的不同取值个数称为这个域的基数。
看个例子就明白了:
其中,每个()都是一个元组,()里的每个数据都是分量。该笛卡儿积的基数为 2 x 2 x 3 = 12,也就是说,D1 x D2 X D3 共有12个元组,它们也就可以列成一张二维表。
而在这其中,有实际意义的才能被叫做是关系。没有实际意义的,那显然不是我们想要的。比如,我现在设定一个条件,就是一个老师只能教一个专业的学生,那上表中很多子集的存在根本就没有意义,因为它不符合实际。那么基于此,我们也就知道,关系是笛卡儿积的有限子集。在关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。若一个关系有多个候选码,则选定其中一个为主码(主键)。
这里一定需要注意候选码的定义,比如:学生(id,姓名,性别…),只用 id 就可以唯一地标识一个元组,我们就不能也没必要 这么做:将 id + 姓名 作为候选码。
候选码的属性称为主属性,不包含在任何候选码中的属性称为非主属性或非码属性。
也就是说,在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式的所有属性是这个关系模式的候选码,称为全码。
还有一个容易混淆的概念,索引。
我们现在知道,主键能唯一地标识一个元组,而且整个表中只能有一个主键,那何为索引?
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。
所以我们可以这样理解:
主键相当于是书籍的页码,我们根据页码就能找到这一页。
而索引相当于是书籍的目录,有了目录我们可以很快的知道这本书的基本内容和结构。
一篇文章读懂索引和主键:主键与索引的区别和联系
也许对这部分还会有些疑虑,不过不用担心,之后还会提到这些。
基本关系(基本表或基表)的性质
(注意:并不是所有基本表都会具有这6条性质。比如有的数据库产品是需要区分属性顺序和元组顺序)
① 列是同质的,即每一列中的分量都是同一类型的数据,来自同一个域。
② 不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。比如:学生名和老师名都是人名,但我们要作出区分,所以不同的属性就给予了不同的属性名,分别称之为学生名和老师名。
③ 列的顺序无所谓,即列的次序可以任意交换。
④ 任意两个元组的候选码不能相同。(这个性质一定要注意,它能被选作候选码,就是因为它能唯一性地标识一个元组,现在两个元组的候选码如果相同,就无法判断出元组间的区别,所以这就不可能是候选码)
⑤ 行的顺序无所谓,即行的次序可以任意交换。
⑥ 分量必须取原子值,即每一个分量都必须是不可分的数据项。比如:学生选了很多门课,那现在想将课的相关数据存放在学生表里,那可能会想这么做:
但这种行为是不行的,因为其中的课程分量还是可分的数据项,即:我们不能让表中有表。那遇到类似的问题该怎么解决呢?经过之后的学习就能找到答案。除此以外,还有很多规范性的东西,因为一旦数据出现了问题,造成的损失将会无法挽回,且相关数据的规范还远远不止这些,任何一个逻辑上处理数据的疏忽都有可能造成数据异常,但这部分内容就不详细去解读了,后续可以慢慢体会到相关规范。
综上所述关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件。规范化的关系简称为范式(NF)。
推荐解读文章:数据库设计三大范式
关系的完整性
在关系模型中有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。其中 实体完整性和参照完整性 是关系模型必须满足的完整性约束条件。
- 实体完整性:若属性(指一个或一组属性)A是基本关系R的主属性(即:候选码,可以作为主码的属性),则A不能取空值。所谓空值就是 “不知道” 或 “不存在” 或 “无意义” 的值。 道理很简单,既然能唯一性地标识一个元组,它肯定不能为空,否则也不满足主键(主码)定义。
在说下一个规则前,看一个情况:(主码用下划线标识)
这两个关系之间存在着属性的引用,即学生关系引用了专业关系的主码“专业号”。也就是说,学生关系中的某个属性的取值需要参照专业关系的属性取值。在这里引出一个概念:外码。
设 F 是基本关系 R 的一个或一组属性,但不是关系 R 的码,Ks 是基本关系 S 的主码。如果 F 与 Ks 相对应,则称 F 是 R 的外码,并称基本关系 R 为参照关系,基本关系 S 为被参照关系 或 目标关系。
就比如在上例中,学生关系的“专业号”属性与专业关系的主码“专业号”相对应,因此“专业号”属性是学生关系的外码。这里专业关系是被参照关系,学生关系为参照关系。
参照完整性就是定义外码与主码之间的引用规则。
- 参照完整性:若属性(或属性组)F 是基本关系 R 的外码,它与基本关系 S 的主码 Ks 相对应(基本关系 R 和 S 不一定是不同的关系),则对于 R 中每个元组在 F 上的值必须:① 或者取空值( F 的每个属性值均为空值) ② 或者等于 S 中某个元组的主码值。
比如:上例中,学生关系中每个元组的“专业号”属性只能取下面两类值:
① 空值,表示尚未给学生分配专业;
② 非空值,这时这个值必须是专业关系中某个元组的“专业号”值,否则代表着该学生分配到了一个不存在的专业中,就出现了问题。
用户定义的完整性就是针对某一具体关系数据库的约束条件,它反映了某一具体应用所涉及的数据必须满足的语义要求。比如:某个属性必须取唯一值、某个非主属性不能取空值等。
基本的关系操作
关系模型中常用的关系操作包括:增(insert)删(delete)改(update)查(query)。其中 查 是最主要的部分,因为可想而知 数据更新(增、删、改),增就去增加,删就去删除,改就去修改,不可能有多种多样的方式让其很复杂,而对于 数据查询,我们想要获取我们想要的数据,就需要花费一些精力了。
查询操作又可以分为 选择(select)、投影(project)、连接(join)、除(divide)、并(union)、差(except)、交(intersection)、笛卡儿积等。 其中,选择、投影、并、差、笛卡儿积 是5种基本操作。为什么是这5种?因为,其他操作都可以用上述5种基本操作中的某个或某几个来定义和导出,就像乘法可以用加法来定义和导出一样。
如果各位有 离散数学 的基础,那么接下来的运算将会很好理解。
传统的集合运算
传统的集合运算是二目运算,包括并、差、交、笛卡儿积 4 种运算。
设 关系 R 和 关系 S 具有相同的目 n(即两个关系都有 n 个属性),且相应的属性取自同一个域:
那么可以定义 并、差、交、笛卡儿积 运算如下:
① 并
其结果仍为 n 目关系,由属于 R 或 属于 S 的元组组成。
② 差其结果仍为 n 目关系,由属于 R 而不属于 S 的所有元组组成。
③ 交其结果仍为 n 目关系,由既属于 R 又属于 S 的元组组成。
交不属于基本操作,是因为 交 可以这么描述: R ∩ S = R -(R - S)
④ 笛卡儿积笛卡儿积在上面演示过,在这里就不说明了。
专门的关系运算
这部分的概念其实都很严谨和繁琐,在这里就不进行过多的说明了,就把基本的用法记录下来。但要说的是,这部分很关键,在之后的SQL语句中,就会用到这些,而且如果能够熟练使用,在写SQL语句时就能加快查询速度。
① 选择
选择又称为限制。它是在关系 R 中选择满足给定条件的诸元组。
比如:
例1:查询女性学生:
输出结果是这样的:(其他例子的输出结果就不演示了)
例2:查询年龄小于20岁的学生:
例3:查询年龄小于20岁的女性学生:
也就是说,选择σ 会选出满足条件的所有元组(行)。
② 投影
关系 R 上的投影是从 R 中选择出若干属性列组成新的关系。
比如:
例1:查询学生的姓名和性别:
输出结果是这样的:
例2:查询女性学生的姓名:
也就是说,投影 π 会选出若干属性列(或 满足一定条件的元组的若干属性列)。
③ 连接
连接也称为 θ 连接。它是从两个关系的笛卡儿积中选取属性间满足一定条件的元组。
首先,它有三种连接方式:非等值连接,等值连接,自然连接。
等值连接:它是从关系 R 与 S 的广义笛卡儿积中选择 A、B 属性值相等的那些元组。反之,选择那些属性不相等(即:需要满足一定条件)的那些元组的是非等值连接。
自然连接:一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉。
举个例子就明白了:
非等值连接:
等值连接:
自然连接:
在等值连接(自然连接)的时候,我们可以看到 R 和 S 中某些元组是可能被舍弃的,这些被舍弃的元组被称为悬浮元组。综上所述,我们就可以用这个新用法,加快查询速度:
例:寻找课程成绩在90分以上的学生姓名和学号:
(成绩存放在SC表)
也就是说,如果两个表之间的属性有联系,可以考虑使用连接。
外连接
除此之外,在这里还有一些重要概念!
如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(NULL),那么这种连接就叫做外连接。如果只保留左边关系 R 中的悬浮元组就叫做左外连接(left join),如果只保留右边关系 S 中的悬浮元组就叫做右外连接(right join)。
还拿上面的 R 和 S 举例。
外连接:
左外连接:
右外连接:
④ 除
为了方便理解,提出象集概念:
象集:它表示 R 中属性组 X 上值为 x 的诸元组在 Z 上分量的集合。
看个例子:
在关系 R 中,A 可以取4个值{ A1,A2,A3,A4 }
A1的象集为 {(B1,C2),(B2,C3),(B2,C1)};
A2的象集为 {(B3,C7),(B2,C3)};
A3的象集为 {(B4,C6)};
A4的象集为 {(B6,C6)};
现在看一下除法的定义:
设关系 R 除以关系 S 的结果为关系 T,则 T 包含所有在 R 但不在 S 中的属性及其值,且 T 的元组与 S 的元组的所有组合都在 R 中。
也就是说,根据上面给出的 R 和 S,除法的结果 T 包含所有在 R 但不在 S 中的属性及其值,也就是 上面例子 R 中的属性 A。而所谓的 T 的元组与 S 的元组的所有组合都在 R 中,就是说,最终结果 T 中得到的属性 A 组合 S 中的 B + C(在 R 中同名的属性)都会存在于 R 中。比如:S 在(B,C)上的投影为{(B1,C2),(B2,C1),(B2,C3)}
显然在 R 中,只有 A1 的象集包含了 S 在(B,C)属性组上的投影。所以 R ÷ S = { A1 }
例:查询至少选修1号课程和3号课程的学生号码。建立一个临时关系K:
然后计算:
得到的结果就会是至少选修了1号课程和3号课程的学生号码Sno。
现在把上面所有内容组合起来就可以进行一系列运算了。在关系代数中,这些运算经有限次复合后形成的表达式称为关系代数表达式。
例:查询选修了全部课程的学生号码和姓名。
简单解析:根据除法定义,我们得到了 SC 表中满足条件的学生学号 Sno 属性列,条件是该学生选课时需要选修 Course 表中所有课程(即 所有课程的编号 Cno)。
我们得到了满足条件的学生学号 Sno 属性列后,再去自然连接 Student 中的 Sno 和 Sname 属性列,就得到了同名属性值(Sno)相等的那些元组,就得到了答案。
有了这些基础后,将会方便后续 关系数据库标准语言SQL语句 的学习。
-
【数据库作业10】用SQL语句来表示关系代数中的表达式
2020-03-28 15:08:311、有两个关系S(A,B,C,D)和T(C,D,E,F),写出与下列查询等价的SQL表达式: (1)σA=10(S)\sigma_{A=10}(S)σA=10(S) select * from S where A=10; (2)ΠA,B(S)\Pi_{A, B}(S)ΠA,B(S) select A,B from S; ...1、有两个关系S(A,B,C,D)和T(C,D,E,F),写出与下列查询等价的SQL表达式:
(1) σ A = 10 ( S ) \sigma_{A=10}(S) σA=10(S)//选择 select * from S where A=10;
(2) Π A , B ( S ) \Pi_{A, B}(S) ΠA,B(S)
//投影 select A,B from S;
(3) S ⋈ T S \bowtie T S⋈T
//自然连接 select S.*,T.* from S,T;
(4) S ⋈ S . C = T . C T S \underset{S . C=T . C}{\bowtie} T SS.C=T.C⋈T
//等值连接 select S.*,T.* from S,T where S.C=T.C;
(5) S ⋈ A < E T S \underset{A<E}{\bowtie} T SA<E⋈T
//非等值连接 select S.*,T.* from S,T where A<E;
(6) Π C , D ( S ) × T \Pi_{C, D}(S) \times T ΠC,D(S)×T
//S在cd上的投影与T的笛卡尔积 //方法一: select C,D from S union select * from T; //方法二: select S.C,S.D,T.* from S,T
2、用SQL语句建立以下的4个表;针对建立的4个表用SQL完成第二章习题6中的查询。
S表:create table S(sno char(10), sname char(10), status smallint, city char(10) ); insert into S values('s1','精益',20,'天津'); insert into S values('s2','盛锡',10,'北京'); insert into S values('s3','东方红',30,'北京'); insert into S values('s4','丰泰盛',20,'天津'); insert into S values('s5','为民',30,'上海');
P表:
create table P(pno char(10), pname char(10), color char(10), weight smallint ); insert into P values('P1','螺母','红',12); insert into P values('P2','螺栓','绿',17); insert into P values('P3','螺丝刀','蓝',14); insert into P values('P4','螺丝刀','红',14); insert into P values('P5','凸轮','蓝',40); insert into P values('P6','齿轮','红',30);
J表:
create table J(jno char(10), jname char(10), city char(10) ); insert into J values('J1','三建','北京'); insert into J values('J2','一汽','长春'); insert into J values('J3','弹簧厂','天津'); insert into J values('J4','造船厂','天津'); insert into J values('J5','机车厂','唐山'); insert into J values('J6','无线电厂','常州'); insert into J values('J7','半导体厂','南京');
SPJ:
CREATE TABLE SPJ(SNO CHAR(4), PNO CHAR(4), JNO CHAR(4), QTY SMALLINT ); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S1','P1','J1',200); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S1','P1','J3',100); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S1','P1','J4',700); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S1','P2','J2',100); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S2','P3','J1',400); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S2','P3','J2',200); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S2','P3','J4',500); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S2','P3','J5',400); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S2','P5','J1',400); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S2','P5','J2',100); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S3','P1','J1',200); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S3','P3','J1',200); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S4','P5','J1',100); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S4','P6','J3',300); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S4','P6','J4',200); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S5','P2','J4',100); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S5','P3','J1',200); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S5','P6','J2',200); INSERT INTO SPJ(SNO,PNO,JNO,QTY) VALUES('S5','P6','J4',500);
最终结果:
(1)求供应工程J1零件的供应商号码SNO;
select sno from spj where jno='j1'
(2)求供应工程J1零件P1的供应商号码SNO;
select sno from spj where jno='j1' and pno='p1';
(3)求供应工程J1零件为红色的供应商号码SNO;select sno from spj,p where jno='j1' and p.pno=spj.pno and color='红';
(4)求没有使用天津供应商生产的红色零件的工程号JNO;
select jno from j where not exists( select * from spj,s,p where s.city='天津' and p.color='红' and spj.jno=j.jno and spj.pno=p.pno);
(5)求至少用了供应商S1所供应的全部零件的工程号JNO。
select distinct jno from spj x where not exists( select * from spj y where y.sno='s1' and not exists( select * from spj z where z.pno=y.pno and z.jno= x.jno) );
3、针对习题4中的4个表使用SQL完成以下各项操作:
(1)找出所有供应商的姓名和所在城市;select jname,city from j;
(2)找出所有零件的名称、颜色、重量;
select pname,color,weight from p;
(3)找出使用供应商S1所供应零件的工程号码;
select jno from spj where sno='s1';
(4)找出工程项目J2使用的各种零件的名称及其数量;
select pname,qty from spj,p where jno='j2' and spj.pno=p.pno;
(5)找出上海厂商供应的所有零件号码;
select distinct pno from spj,s where city='上海' and spj.sno=s.sno;
(6)找出使用上海产的零件的工程项目;select distinct jname from spj,s,j where s.sno=spj.sno and s.city='上海' and j.jno=spj.jno;
(7)找出没有使用天津产的零件的工程号码;select jno from j where not exists( select * from spj,s where spj.jno=j.jno and spj.sno=s.sno and s.city='天津');
(8)把全部红色零件的颜色改成蓝色;update p set color='蓝' where color='红';
(9)由S5供给J4的零件P6改为由S3供应,请作必要的修改;
update spj set sno='s3' where sno='s5' and jno='j4' and pno='p6';
(10)从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录;
delete from spj where sno='s2' delete from s where sno='s2';
(11)请将(S2,J6,P4,200)插入供应情况关系;
insert into spj values('s2','p4','j6',200);
4、请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应商数量(QTY)。针对该视图完成下列查询:
create view view_s as select sno,pno,qty from spj where jno=(select jno from j where jname='三建');
(1)找出三建工程项目使用的各种零件代码及其数量;
select pno,qty from view_s
(2)找出供应商S1的供应情况;select * from view_s where sno='s1'
-
Delphi 使用表达式进行数据库查询操作范例.rar
2019-07-10 10:38:50Delphi 使用表达式进行数据库查询操作范例,通过TADO为查询初始查询字段结构并将结构保存在StringGrid2中.测试用数据库在database目录中,是SQLSERVER2003格式的数据库文件。下面是摘录的一些代码片段: ... -
怎样用关系代数表达式表示查询要求?求过程
2019-12-26 17:39:42怎样用关系代数表达式表示查询要求? 用一个例子来讲述一下 题目:查询至少选修了全部课程的学生学号和姓名? 题目:查询至少选修了全部课程的学生学号和姓名? ① 找出题目中暗含属性、以及它们所在的表 ...怎样用关系代数表达式表示查询要求?
用一个例子来讲述一下
题目:查询至少选修了全部课程的学生学号和姓名
题目所用到的表如下
题目:查询至少选修了全部课程的学生学号和姓名?
① 找出题目中暗含属性、以及它们所在的表
② 根据主键、外键找出表与表之间连接的属性
虽然CNo和CN都可标识课程,但CNo是课程表C的主键和SC表的外键,我们很自然会选择CNo,而舍弃CN
③ 根据上面的表的关系,先进行单表操作(选取?投影?)
④ 根据题意和表联系,进行多表操作(自然连接?连接?除?)
得到答案
转换成sql代码为select T1.SNo,SN from --表1 (select SNo,count(*) As C_Num from SC group by(SNo) having(count(*)=(select count(CNo) from C))) AS T1 inner join --表2 (select SN,SNo from S) AS T2 on T1.SNo=T2.SNo
-
数据库应用之关系代数(relational algebra)
2015-11-23 23:33:34关系代数表达式的五个基本算子 1.选择(selection):即选择某些行。代码:select ··· from ··· where。表达式:σ<条件>(<表>)。 2.投影(projection):即选择某些列。代码:select ··· distinct ... -
数据库理论:关系代数与 SQL
2021-01-13 23:29:44关系代数通过符号化的语言,来描述数据库的行为关系,相当于简化版的 SQL。比如并,交,差,笛卡尔积,除法,select 语句等等。 SQL 则是结构化查询语句,相比于关系代数,更方便被计算机识别的一种查询语言。 其余... -
relational-algebra-interpreter-using-antlr-v4:自动将关系代数表达式转换为 SQL 查询并执行它们的解释器
2021-06-20 14:24:49解释器将关系代数表达式作为用户的输入,自动将其转换为 SQL 查询,在数据库服务器上执行查询,并将查询结果输出给用户。 ###内容 解压后得到的文件夹2012CSB1013_2012CSB1039包含以下内容: Rel_Al_... -
DbSchema(数据库关系图设计器) V8.1.7 官方版
2021-03-03 19:52:01DbSchema 是一款专业可靠的数据库关系图设计软件,你可以通过拖放或按外键图标添加表格,并具有多种过滤器,数据排序机制等等。可通过多个数据库管理和同步模式使用可帮助您设计,记录和管理数据库,轻松设计新表,... -
关系代数与SQL查询优化的研究
2020-11-10 12:36:511 引言 随着各个应用领域信息化程度日益提高,数据库中的数据量迅猛增长,导致数据库系统的查询...通过分析关系代数表达式的等价变换准则及查询代价,于给定的SQL查询与关系代数表达式对应关系,研究并分析基于关系 -
数据库系统课程设计 含源代码
2014-06-30 08:37:09主要设计内容 任务一 创建和修改表的定义 要求: 设计实现表的物理存储结构; 语句以命令行和图形化界面两种形式实现;... 要求:输入关系代数表达式或SELECT查询语句,输出优化后的表达式。 -
解决Python正则表达式匹配反斜杠”\”问题
2020-12-31 18:26:26最终发现自己理解错了,原来原始字符串和“正则转义”没有一点关系;下面详细谈一谈。 二、字符串转义 反斜杠,在Python中比较特殊,就是它可以用来构成一些特殊字符,比如“\n”表示换行,“\t”表示制表符。下面是... -
【数据库】关系查询处理和查询优化
2020-06-11 00:37:22关系数据库系统的查询处理 一、关系数据库系统的查询处理 1.查询处理步骤 关系数据库管理系统查询处理阶段 : 1)查询分析 :对查询语句进行扫描、词法分 析和语法分析 词法分析:从查询语句中识别出正确的语言符号... -
数据库 关系代数 投影概念理解
2015-11-29 13:13:59关系R上的投影是从R 中选择出若干属性列组成新的关系。记作: π A (R )= { t [A ] | t ∈ R } 其中A 为R 中的属性列。 投影操作是从列的角度进行的运算。 例3 查询学生的姓名和所在系,即求Student关系在... -
关系数据库系统的查询处理
2022-01-10 12:18:24代数优化:指关系代数表达式的优化 物理优化:指存取路径和底层操作算法的选择 查询处理步骤 关系数据库管理系统查询处理阶段 : 1.查询分析 2.查询检查 3.查询优化 4.查询执行 查询分析 查询分析的任务:对查询... -
图数据库:从传统关系型数据库说起
2020-10-13 12:35:501.数据库 按照早期的数据库理论,比较流行的数据库模型有三种,分别为层次式...用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系 -
关系数据库系列文章之到底什么是关系(一)
2018-08-05 02:28:45在语言X中如何实现Y,像这种具体的只是(know-how)可快速提高你的工作效率。但是一旦语言发生变化,这种知识就无法再使用。... 作为程序员,在日常的开发中,我们避免不了的就要接触数据库这个概念,而关系... -
LambdaLite:大约 250 行 Common Lisp 的功能性关系数据库
2021-07-06 18:21:38LambdaLite 大约 250 行 Common Lisp 的功能性关系数据库。 “哇!这真的很酷”—— “非常可爱” ... 结果表达式变成了一个函数闭包,它被大多数 Lisp 实现编译成本机代码。 是酷还是什么? 动机 考虑以 -
考前复习必备MySQL数据库(关系型数据库管理系统)
2020-02-23 19:06:45大家好,我是魔王哪吒,话不多说,今天带来的是一篇《考前复习必备MySQL数据库(关系型数据库管理系统)》文章,欢迎大家喜欢。前言MySQL是一个关系型数据库管理系统,在web应用方面,M... -
数据库之关系代数
2020-04-16 15:38:321.设有一个公司产品销售数据库,其关系模式如下。 顾客 C ( 编号 cid, 姓名 cname, 城市 city, 折扣 discnt ) 供应商 A ( 编号 aid, 名称 aname, 城市 city ) 商品 P ( 编号 pid, 名称 pname, 库存数量 quantity, ... -
非关系型数据库 入门简介
2019-07-01 16:18:09非关系型数据库也叫Nosql数据库,全称是not noly sql非关系型数据库提出另一种理念,例如,以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限... -
大连海事大学数据库实验二,查询
2022-05-18 19:49:50(1)深入复习教材第三章SQL有关数据库定义和基本查询SQL语句,理解关系代数表达式如何使用基本的SQL查询语句实现。 (2)通过企业管理器添加数据,或者通过其他的数据自动产生工具自动添加数据,以便进行查询。如果... -
数据库-关系代数及数据库基本概念
2019-06-02 14:37:26DB:数据库,contains information about a particular enterprise DBS:数据库系统 DBMS:提供一种既方便又高效的方法来存储和检索数据库信息 1.存储管理:是一个程序模块负责与文件系统交互,高效存储、检索和更新... -
HSQLDB:一款基于 Java 的嵌入式关系型数据库
2020-09-07 22:00:02HSQLDB(HyperSQL DataBase)是一个使用 Java 语言编写的开源关系型数据库,支持嵌入式、客户端/服务器部署模式。本文介绍了 HSQLDB 的功能、下载安装、基本操作以及相关的学习资源。 -
SQL server数据库手动建库建表建约束,代码建库建表,数据库备份
2022-02-10 20:13:36如果数据库没有显示出来,右键数据库——>刷新 即可 二,sql代码建库 create database db_t267 三,手动建表以及建立约束 右键表——>新建——>表 填写列名和数据类型 建立约束 主键... -
EBSCOhost数据库中,检索字段代码为TI、SO、AU分别表示的是:
2021-01-17 13:41:54【单选题】EBSCOhost数据库中,检索字段代码为TI、SO、AU分别表示的是: 【单选题】The sense of sound is one of our most important means of knowing what is going on around us. Sound has a waste product, too... -
数据库基础知识之运算符操作
2022-03-15 20:18:21数据库运算符的基本操作 -
数据库——关系代数
2019-03-25 19:59:00专门的关系运算 选择投影连接除 STUDENT(Sno,Sname,Ssex,Sage,Sdept)//学生表 COURSE(Cno,Cname,Cpno,Ccredit)//课程表 SC(Sno,Cno,Grade) //选课表 1. 选择(Selection) 选择又称为... -
数据库七(关系查询处理和查询优化)
2020-05-05 14:14:15一、关系数据库系统的查询处理: 查询分析:对查询语句进行扫描,词法分析、语法分析、语义分析、符号名转换 查询检查:根据数据字典对合法的查询语句进行语义检查; 根据数据字典中用户权限和完整性约束定义对...