【word】关系代数中交运算与差运算的SQL语句实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关系代数中交运算与差运算的SQL 语句实
178福建电脑2009年第11期
关系代数中交运算与差运算的SQL 语句实现李国雁.李奇(河南商业高等专科学校计算机应用系河南郑州450045)
摘要】:关系代数是关系数据操纵语言的一种传统表达方式,是结构化查询语言SQL 的重要理论基础.然而关系代
数8 种常用运算中的交运算, 差运算和除运算.在SQL 中没有提供专门的运算符加以实现,不利于初学者更好的理解关系代
数和SQL 之间的关系.本文针对这一现状,对交运算,差运算在SQL 中的实现方法进行探讨.
【关键词】:关系代数;交运算;差运算;SQL语句
1,引言1970年E.F.Codd提出了关系模型的概念【JI.奠定了关系模
型的理论基础.为当今主流的关系数据库管理系统提供了坚实
的数学基础.1974年.E.F.Codd又联合RayBoyceQonCham.
bedin 等人里程碑式地提出了SOL(StrueturedQueryLanguage)it~
言.并在上世纪80 年代提出了全关系系统的 1 2条准则目.关系
数据库技术.经过近半个世纪的发展,形成了坚实的理论基础,
成熟的商业产品和广泛的应用领域关系数据模型有三种等价的操纵语言:关系代数,关系演算
和SQL, 其中SOL 是关系数据库的标准语言,关系代数和关系演
算是它的理论基础.关系代数是一种抽象的查询语言.用对关系
的运算来表达查询.作为研究关系数据语言的数学工具.大多商
用的DBMS 先把用户提交的sgL 查询转化成等价的扩展关系代数表达式.在执行之前需要根据等价规则对其优化1”3141因. 此更好的理解二者之间的关系对于SOL 语句的执行效率.乃至数据
库应用系统的运行效率有着重要帮助但是关系代数中的交运算和差运算在大多DBMS中没有对应的运算符.用SQT.语句表达包含这两种运算含义的查询对初学者而言成为了难题而目前的文献跚也只是从某一角度介绍一种转换方法.无法使读者
从多角度深人思考二者之间的关系.本文将通过介绍交运算和
差运算的不同实现方法解决这一问题
2,交运算的sQr语句实现 2.1 交运算的定义:
关系R与关系S的交由既属于R又属于S的元组组成.其结果关系仍为n 目关系.记作:RNS=ftft € ItAtES}.
用sOL 语句实现交运算的核心在于如何找到两个关系中
相同的元组(即两个关系均包含的元组),下面介绍 4 种方法:
2.2 方法一:利用交运算的定义这种方法根据交运算的定义.通过直接比较两个关系中元
组各个属性值是否相同.判断这条元组是否同时出现在两个关
系中,SOL语句如下:
SekctR.A,R.BFromR.SWhereR.A=S.AandR.B=S.B(A.B
为属性集 1
例1:若关系R和S为如表1.1和表1.2所示的2元关系.
表1.1关系R表1.2关系s 则根据方法一,R和S求交集的SQL语句可写成如下形
式:
SelectR.A,R.BfromR.SWhereR.A=S.AandR.B=S.B 2.3方法二:利用并运算
这种方法先对两个关系求并集.如果并的结果中出现两条
重复的元组,说明这条元组是两个关系均包含的.SQT.语句如下: Select?from (SelectfromR
Unionall
SelectfromS1
Groupby 关键字
Havingeounl()=2
则根据方法二例I中R和S求交集的SQL语句可写成如
形式:
SeIectfrom
(SelectfromR
Unionall
SelectfromS1
GroupbyA.B
Havingeotlnt(,=2 2.4方法三:利用in 谓词这种方法利用嵌套查询的方式判断哪些元组两个关系均包含.SQL语句如下:
SELECT
FROMR
WHEREB: 取值1andAIN (SELECTA
FROMS
WHEREB= 取值21
则根据方法三例I中R和S求交集的sQL语句可写成如
形式:
SELECT
FRObIR
WHEREAIN (SELECTA
ILIONS
WHERER.B---S.B)
2.5方法四:使用EXI 谓词这种方法利用带有EXISTS 谓词的嵌套查询.判断关系R
中的元组是否在关系S中也存在.SQL语句如下:
Sdect ' FromRWhere
Exists(Sel~tFromSWhere
R.A--S.AandR.B=S.B,
则根据方法四例1中R和S求交集的SQL语句可写成如下形式:
Select?fromRWhere
Exists(Select ' FromSWhere
R.A--S.AandR.B--S.B1
3,差运算的SQL 语句实现
3.1 差运算的定义:
关系R与关系S的差由属于R而不属于S的所有元组组成其结果关系仍为n目关系.记作:R—S={tlt € RAtSI.
用SQL 语句实现交运算的核心在于如何找到那些只在一个关系中出现的元组,下面介绍3种方法: 3.2方法一:利用差运算定义
这种方法根据交运算的定义.利用嵌套判断哪些元组是R
中包含而S中没有的.SQt,语句如下:
SelectAfromRWhereANotinS(A 为单属性 1
例2:若学生的选课信息如表 2.1 所示的2元关系.其中
Sno表示学生的学号QnO表示学生所选择的课程号.查询选修2009年第11期福建电脑179
课程1的学生集合与选修课程 2 的学生集合的差集.
SnoCno
表 2.1 关系SC
根据方法一.SQL 语句可写成如下形式:
SELECTSno f0MSC
WHERECno=lAND
SnoNOTIN (SELECTSno
FROMSC
WHERECno:21 3.3方法二:使用&t;>ALL 谓词这种方法使用<>ALL 谓词来选择R 中的元组.这些元组不可能和S中任一元组相同.SQL语句如下:
SelectAfromRWhereA<>ANY(SelectAfromS1fA 为单属性 1
则根据方法二,例2中的SQL 语句可写成如下形式: