一、传统的集合运算与S Q L 语句实现
传统的集合运算包括四种运算:并(∪)、交(∩)、差(—)、广义笛卡尔积(X)。
<!--[if !supportLists]-->(一) <!--[endif]-->并运算(Union)
(1)概述
设关系R和关系S具有相同的目n,且相应的属性取自同一个域。则关系R和关系S的并记为R∪S,其结果仍为n目关系,由属于R或属于S的元组组成。如R和S的元组分别用两个圆表示(去掉了重复的记录),则R∪S的集合如图1.1所示虚影部分元组。
图1.1 集合R∪S集合
<!--[if !supportLists]-->(2) <!--[endif]-->SQL 语句
Select * from R Union Select *from S
<!--[if !supportLists]-->(3) <!--[endif]-->数据示例
关系R:
商品代码 |
子公司代码 |
品名 |
数量 |
单价 |
1 |
Comp1 |
钢笔 |
50 |
10.00 |
2 |
Comp1 |
圆珠笔 |
200 |
6.00 |
关系S:
商品代码 |
子公司代码 |
品名 |
数量 |
单价 |
1 |
Comp1 |
钢笔 |
50 |
10.00 |
5 |
Comp2 |
练习本 |
200 |
3.00 |
6 |
comp2 |
信笺 |
1000 |
3.00 |
R∪S运算结果
商品代码 |
子公司代码 |
品名 |
数量 |
单价 |
1 |
Comp1 |
钢笔 |
50 |
10.00 |
2 |
Comp1 |
圆珠笔 |
200 |
6.00 |
5 |
Comp2 |
练习本 |
200 |
3.00 |
6 |
comp2 |
信笺 |
1000 |
3.00 |
<!--[if !supportLists]-->(二) <!--[endif]-->交运算(Intersection)
(1)概述
设关系R和关系S具有相同的目n,且相应的属性取自同一个域。关系R和关系S的交记为R∩S,结果仍为n目关系,由既属于R又属于S的元组组成。如R和S的元组分别用两个圆表示,则R∩S集合运算结果可用图1.2示意,则两圆相交部分元组表示R与S的交,即由属于R 同时又属于S的记录构成的集合。
图1.2 集合R∩S
<!--[if !supportLists]-->(2) <!--[endif]-->SQ L 语句
Select R.学号 from R,S where R. 学号=S. 学号and R.课程名=S. 课程名and R.分数=S.分数
或
Select R.学号,R.课程名,R.分数 from R INTERSECT Select S.学号,S.课程名,S.分数 from S
<!--[if !supportLists]-->(3)<!--[endif]-->数据示例
关系R:
学号 |
课程名 |
分数 |
1 |
数学 |
80 |
1 |
英语 |
85 |
1 |
政治 |
90 |
2 |
数学 |
85 |
2 |
英语 |
80 |
2 |
政治 |
90 |
关系S:
学号 |
课名 |
分数 |
1 |
数学 |
80 |
1 |
英语 |
85 |
1 |
政治 |
92 |
2 |
数学 |
85 |
2 |
英语 |
80 |
2 |
政治 |
90 |
R∩S结果:
学号 |
课名 |
分数 |
1 |
数学 |
80 |
1 |
英语 |
85 |
2 |
数学 |
85 |
2 |
英语 |
80 |
2 |
政治 |
90 |
<!--[if !supportLists]-->(三)<!--[endif]-->差运算(Difference)
(1)概述
设关系R和关系S具有相同的目n,且相应的属性取自同一个域。定义关系R和关系S的差记为R-S,其结果仍为n目关系,由属于R而不属于S的元组组成。
如R和S的元组分别用两个圆表示,则R-S的集合如图1.3所示。比较图1.2和图1.3,显然R=(R∩S)∪(R-S)或R-S=R-(R∩S),即由属于R 但不属于S 的记录构成的集合,去掉重复的记录。
图1.3 集合R-S
<!--[if !supportLists]-->(2) <!--[endif]-->SQL语句
Select R. 学号,R. 课程名,R. 分数 from R EXCEPT Select S. 学号,S. 课程名,S. 分数 from S
或
select 学号, 课程名, 分数From R CWHERE 学号 NOT IN (Select R.学号 from R,S where R. 学号=S. 学号and R.课程名=S. 课程名and R.分数=S.分数)
(3)数据示例
R-S运算结果:
学号 |
课名 |
分数 |
1 |
政治 |
90 |
<!--[if !supportLists]-->(四)<!--[endif]-->笛卡尔积R × S(Extended Cartesian Product)
(1)概述
两个分别为n元和m元的关系R和S的广义笛卡尔积R×S是一个 (n×m)元组的集合。元组的前n个分量是R的一个元组,后m个分量是S的一个元组,若R有K1个元组,S有K2个元组,则R×S有K1×K2个元组。记为R×S
(2)对应的SQL 语句
Select * from R , S
(3)数据示例
关系R:
姓名 |
年龄 |
张三 |
20 |
李四 |
19 |
关系S:
地址 |
邮编 |
长沙 |
410004 |
娄底 |
417119 |
R×S结果:
姓名 |
年龄 |
地址 |
邮编 |
张三 |
20 |
长沙 |
410004 |
张三 |
20 |
娄底 |
417119 |
李四 |
19 |
长沙 |
410004 |
李四 |
19 |
娄底 |
417119 |
专门的关系运算包括四种运算即选择(σ)、投影(Π)、连接(∞)和除法(÷),是关系数据库数据维护、查询、统计等操作的基础。
<!--[if !supportLists]-->(一)<!--[endif]-->选择(Selection)
(1)概述
设有关系R,在关系R中求取满足给定条件F的元组组成新的关系的运算称为选择。记作σF(R)。
其中F是一个条件表达式,其值为“真”或“假”。σF(R)是从关系R中选取使条件表达式F为真的元组。这是以行为处理单位进行的运算。
F是由常量、变量及算术比较符{ >,≥,<,≤,=,≠ }和逻辑运算符(∧,∨, ┓)等构成。
(2)SQL语句
SELECT R.学号,R.课程名,R.分数 from R WHERE 分数 >85
<!--[if !supportLists]-->(3)<!--[endif]-->数据示例
选择运算结果如下:
学号 |
课程名 |
分数 |
1 |
政治 |
90 |
2 |
政治 |
90 |
<!--[if !supportLists]-->(二)<!--[endif]-->投影(Projection)
(1)概述
设有关系R,在关系R中求指定的若干个属性列组成新的关系的运算称作投影,记作ΠA(R)。其中A为欲选取的属性列列名的列表,R叫关系名(或叫表名)。这是以列作为处理单位进行的运算,示意图如图2.2所示的粗体部分,a∈{A},c∈{A},d∈{A}。
a |
b |
c |
d |
a∈{A} |
|
c∈{A} |
d∈{A} |
图2.2 ПΑ(R)示意图
(2)SQL语句
若关系运算式为:П品名,数量(R)或П[3],[4](R)
对应的SQL语句为:SELECT 品名,数量 FROM R
(3)数据示例
关系R:
商品代码 |
子公司代码 |
品名 |
数量 |
单价 |
1 |
Comp1 |
钢笔 |
50 |
10.00 |
2 |
Comp1 |
圆珠笔 |
200 |
6.00 |
投影运算结果如下:
品名 |
数量 |
钢笔 |
50 |
圆珠笔 |
200 |
<!--[if !supportLists]-->(三)<!--[endif]-->连接(Join)
(1)概述
从两个分别为n, m目的关系R和S的广义笛卡尔积中选取满足给定条件F的元组组成新的关系称为R和S的连接,记作R∞FS(F=A θ B)。其中A和B分别为R和S上度数相等且可比的属性列,θ是算术比较符(>,≥,<,≤,=,≠)。即连接运算就是从两个关系的笛卡尔积中选取满足一定连接条件的元组的集合,连接的结果是一个(k 1 + k 2 )元的关系。
(2)SQL 语句
Select * from R,S where R.A = S.C
(3)数据示例
关系R:
A |
B |
A1 |
101 |
A2 |
201 |
关系S:
C |
D |
E |
A1 |
81 |
85 |
A2 |
82 |
70 |
A3 |
83 |
90 |
R与S的连接运算结果
A |
B |
C |
D |
E |
A1 |
101 |
A1 |
81 |
85 |
A2 |
201 |
A2 |
82 |
70 |
<!--[if !supportLists]-->(四)<!--[endif]-->除(Division)
(1)概述
给定关系R(x,y)与S(y)其中x,y为属性集(也可为单属性),R中的y和S中的y是同名的属性(集)也可以有不同的属性名,但必须出自相同的域集。在求解R÷S时,对R按x的值的分组,然后检查每一组,如某一组中的y包含S中全部的y,则取该组中的x的值作为关系P中的一个元组,否则不取。R÷S的商等于关系P。
(2)SQL语句
SELECT DISTINCT A.Name FROM R AS A WHERE NOT EXISTS
(SELECT * FROM S AS B WHERE NOT EXISTS (SELECT * FROM R AS C where C.Name=A.Name and B.City=C.City))
GROUP BY A.Name
(3)数据示例
关系R:
Name |
City |
张三 |
长沙 |
张三 |
娄底 |
李四 |
长沙 |
李四 |
邵阳 |
关系S:
Address |
长沙 |
娄底 |
R除S的运算结果:
Name |
张三 |
相关推荐
总结来说,SQL语句的编写与关系代数运算理论是密切相关的。数据库学者在理解关系代数的基础上,通过实际编写SQL语句来处理数据,可以更加深刻地掌握数据库操作的实质。在教学过程中,结合两者的学习可以有效解决学者...
### 关系代数运算与SQL查询的对应关系 在数据库领域,关系代数作为一种理论工具,为理解数据处理和查询提供了坚实的数学基础。它通过一套严谨的运算规则,包括并集(Union)、差集(Difference)、交集...
"关系代数中交运算与差运算的SQL语句实现" 关系代数是关系数据操纵语言的一种传统表达方式,是结构化查询语言SQL的重要理论基础。在关系代数中,交运算、差运算和除运算是八种常用运算中最重要的三个。然而,SQL中...
关系代数中除运算的SQL语句实现.pdf
关系代数和 SQL 语言是数据库管理系统的核心组件,关系代数提供了抽象的查询模型,而 SQL 语言则是关系代数的具体实现。下面我们将通过习题的形式来总结关系代数和 SQL 语言的知识点。 关系代数 关系代数是由埃德加...
虽然SQL的表达方式比关系代数更为直观和灵活,但掌握其与关系代数运算的对应关系对于深入理解数据库操作的本质是非常有益的。 首先,从关系代数到SQL的转换来看,选择运算σ(读作“西格玛”)是关系数据库中非常...
在SQL中,还提供了子查询、连接等实现现代关系代数运算的方法。子查询可以在外部查询中使用表达式、列表或者数据集合的地方,连接可以在水平方向上合并两个表,并产生一个新的结果集合。 连接类型有多种,它们之间...
通过这些实验,可以加深对关系代数运算和SQL语句之间关系的理解,有助于提高SQL语句的书写技巧。 文章中提及了一个案例导入,即网上图书订购系统的数据库。通过客户表、图书表和订购表三个表的结构和内容,展示了在...
这段SQL语句首先通过子查询找出“王强”的班级,然后在外层查询中筛选出与“王强”同一班级的学生(排除“王强”本人)。 #### 2. 检索管理学院没有选修“电子商务”课程的学生的学号、姓名、班级、专业。 **SQL...
以下是对文档中提到的关系代数运算的详细解释: 1. **自然连接(Natural Join)**: 自然连接是一种特殊的等值连接,它基于两个关系共有的属性进行比较。结果中只保留一次相同的属性列,消除了重复。例如,如果关系R和...
为了解决这个问题,本文提出了一种在编译期间使用C++编译器检查关系代数运算的方法,从而生成正确的SQL查询,提前进行部分运行期检查工作。 首先,文章指出在使用C++等高级语言编写数据库应用程序时,SQL查询的编写...
### SQL语句笔试经典考题知识点解析 #### 1. SQL语言的特点 - **非过程化**:SQL语言是一种非过程化的语言,这意味着用户只需指定要做什么,而不需要详细说明如何做。这使得SQL易于学习和使用。(选择题1) - **...
文章通过分解关系代数除运算为近似除和关系整除,对比分析了这两种不同的逻辑,并通过实例展示了如何使用SQL语句来实现这些除运算。通过具体的SQL实现,可以看出在数据库操作中,如何利用已有的标准语言(SQL)来...
这里我们将深入探讨如何在SQL语句中实现这种关系代数的除法操作。 首先,我们要理解SQL中的除法概念通常涉及到查找满足特定条件的记录比例,或者说是找到一个集合中的元素在另一个集合中的对应关系。在关系代数中,...
逻辑运算符也常常被用于关系代数运算,其中包括非(NOT)、与(AND)、或(OR)等,它们可以组合基本的条件,以实现更复杂的逻辑筛选。 在实际应用中,关系代数表达式是构建数据库查询语句的基础,数据库系统如SQL...
本文主要讨论了关系代数中差运算与除运算的定义,并探讨了在SQL语言中如何实现这两种运算的几种方法。 在关系代数中,差运算定义为两个关系R和S具有相同的目数n,且相应的属性取自同一个域,关系R和关系S的差的结果...
首先,理解SQL语句的基础是关系运算理论。SQL语言基于关系运算,而关系代数则是以集合操作为基础的数据操纵语言。关系代数中的基本操作包括并集(union)、差集(difference)、笛卡尔积(cartesian product)、投影...
关系代数表达式在SQL语言中的实现是通过使用SELECT、FROM、WHERE、GROUP BY、HAVING等语句来实现的。 关系代数表达式的优点是可以简洁地描述复杂的数据操作,提高了数据处理的效率和准确性。但是,关系代数表达式也...