关系代数运算与SQL语句

一、传统的集合运算S Q L 语句实现

传统的集合运算包括四种运算:并()、交()、差()、广义笛卡尔积(X)。

<!--[if !supportLists]-->(一)   <!--[endif]-->并运算(Union

1)概述

设关系R和关系S具有相同的目n,且相应的属性取自同一个域。则关系R和关系S的并记为RS,其结果仍为n目关系,由属于R或属于S的元组组成。如RS的元组分别用两个圆表示(去掉了重复的记录),则RS的集合如图11所示虚影部分元组。




 

11 集合RS集合

<!--[if !supportLists]-->(2)   <!--[endif]-->SQL 语句

Select * from R Union Select *from S

<!--[if !supportLists]-->(3)   <!--[endif]-->数据示例

关系R

商品代码

子公司代码

品名

数量

单价

1

Comp1

钢笔

50

1000

2

Comp1

圆珠笔

200

600

关系S

商品代码

子公司代码

品名

数量

单价

1

Comp1

钢笔

50

10.00

5

Comp2

练习本

200

3.00

6

comp2

信笺

1000

3.00

RS运算结果

商品代码

子公司代码

品名

数量

单价

1

Comp1

钢笔

50

1000

2

Comp1

圆珠笔

200

600

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的元组组成。如RS的元组分别用两个圆表示,R∩S集合运算结果可用图12示意,则两圆相交部分元组表示RS的交,即由属于R 同时又属于S的记录构成的集合


12 集合R∩S

<!--[if !supportLists]-->(2)   <!--[endif]-->SQ L 语句

Select  R.学号 from RS  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的元组组成。

  如RS的元组分别用两个圆表示,则R-S的集合如图13所示。比较图12和图13,显然R=(R∩SRS)或RSR-(R∩S),即由属于R 但不属于S 的记录构成的集合,去掉重复的记录。


13 集合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 RS  where  R. 学号=S. 学号and R.课程名=S. 课程名and R.分数=S.分数)

3)数据示例

R-S运算结果:

学号

课名

分数

1

政治

90

 

<!--[if !supportLists]-->(四)<!--[endif]-->笛卡尔积R × SExtended Cartesian Product

1)概述

两个分别为n元和m元的关系RS的广义笛卡尔积R×S是一个 (n×m)元组的集合。元组的前n个分量是R的一个元组,后m个分量是S的一个元组,若RK1个元组,SK2个元组,则R×SK1×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的元组组成新的关系的运算称为选择。记作σFR)。

其中F是一个条件表达式,其值为σF(R)是从关系R中选取使条件表达式F为真的元组。这是以行为处理单位进行的运算。

F是由常量、变量及算术比较符{ ><=≠ }和逻辑运算符(, )等构成。

2SQL语句

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叫关系名(或叫表名)。这是以列作为处理单位进行的运算,示意图如图22所示的粗体部分,aA},cA},dA}。

a

b

c

d

a∈{A

 

c∈{A

d∈{A

22 ПΑR)示意图

2SQL语句

     关系运算式为:П品名,数量(R)或П[3][4]R

       对应的SQL语句为:SELECT  品名,数量 FROM  R

3)数据示例

     关系R

商品代码

子公司代码

品名

数量

单价

1

Comp1

钢笔

50

1000

2

Comp1

圆珠笔

200

600

       投影运算结果如下:

品名

数量

钢笔

50

圆珠笔

200

<!--[if !supportLists]-->(三)<!--[endif]-->连接Join

1)概述

从两个分别为n m目的关系RS的广义笛卡尔积中选取满足给定条件F的元组组成新的关系称为RS的连接,记作R∞FSFA θ B)。其中AB分别为RS上度数相等且可比的属性列,θ是算术比较符(><=)。即连接运算就是从两个关系的笛卡尔积中选取满足一定连接条件的元组的集合,连接的结果是一个(k 1 + k 2 )元的关系。

2SQL 语句

Select * from RS  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

RS的连接运算结果

A

B

C

D

E

A1

101

A1

81

85

A2

201

A2

82

70

 

<!--[if !supportLists]-->(四)<!--[endif]-->除(Division

1)概述

给定关系Rxy)与Sy)其中xy为属性集(也可为单属性),R中的yS中的y是同名的属性(集)也可以有不同的属性名,但必须出自相同的域集。在求解R÷S时,对Rx的值的分组,然后检查每一组,如某一组中的y包含S中全部的y,则取该组中的x的值作为关系P中的一个元组,否则不取。R÷S的商等于关系P

2SQL语句

   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

长沙

娄底

RS的运算结果:

 Name

张三

猜你喜欢

转载自wolfcame.iteye.com/blog/2337936
今日推荐