步步为营关系代数练习与三种连接

  • 2019 年 10 月 6 日
  • 筆記

MySQL学习仓库Up-Up-MySQL,这是一个学习MySQL从入门实战到理论完善,再到精通的一个仓库,后面会把MySQL的学习资料上传上去!欢迎大家star与fork起来!

仓库地址:

https://github.com/Light-City/Up-Up-MySQL

也可以点击阅读原文!

今天上手第六弹,关系代数练习与三种连接!

1.笛卡尔积、等值连接、自然连接三者之间区别

笛卡尔积对两个关系R和S进行操作,产生的关系中元组个数为两个关系中元组个数之积。等值联接则是在笛卡尔积的结果上再进行选择操作,挑选关系第i个分量与第(r+j)个分量值相等的元组;自然连接则是在等值联接(以公共属性值相等为条件)的基础上再行投影操作,去掉S中的公共属性列,当两个关系没有公共属性时,自然连接就转化成笛卡尔积。

1)等值连接必须要有等值的条件,当条件不同时连接的结果也不相同,两个关系可以没有相同的属性列

2)自然连接必须要有相同的属性列才能进行

下面演示上述理论:

现有S与R两张表,数据如下:

mysql> select * from S;  +------+------+  | A    | B    |  +------+------+  |    1 |    2 |  |    3 |    3 |  |    5 |    9 |  +------+------+  3 rows in set (0.00 sec)    mysql> select * from R;  +------+------+  | B    | C    |  +------+------+  |    2 |    1 |  |    7 |    2 |  |    3 |    5 |  +------+------+  3 rows in set (0.00 sec)  
  • 笛卡尔积操作
mysql> select * from S,R;  +------+------+------+------+  | A    | B    | B    | C    |  +------+------+------+------+  |    1 |    2 |    2 |    1 |  |    3 |    3 |    2 |    1 |  |    5 |    9 |    2 |    1 |  |    1 |    2 |    7 |    2 |  |    3 |    3 |    7 |    2 |  |    5 |    9 |    7 |    2 |  |    1 |    2 |    3 |    5 |  |    3 |    3 |    3 |    5 |  |    5 |    9 |    3 |    5 |  +------+------+------+------+  9 rows in set (0.00 sec)  
  • 等值连接

没有相同属性列的S.A=R.C等值连接:

mysql> select * from S,R where S.A=R.C;  +------+------+------+------+  | A    | B    | B    | C    |  +------+------+------+------+  |    1 |    2 |    2 |    1 |  |    5 |    9 |    3 |    5 |  +------+------+------+------+  2 rows in set (0.00 sec)  

有相同属性列的S.B=R.B等值连接:

mysql> select * from S,R where S.B=R.B;  +------+------+------+------+  | A    | B    | B    | C    |  +------+------+------+------+  |    1 |    2 |    2 |    1 |  |    3 |    3 |    3 |    5 |  +------+------+------+------+  2 rows in set (0.00 sec)  
  • 自然连接
mysql> select * from S,R where S.B=R.B;  +------+------+------+------+  | A    | B    | B    | C    |  +------+------+------+------+  |    1 |    2 |    2 |    1 |  |    3 |    3 |    3 |    5 |  +------+------+------+------+  2 rows in set (0.00 sec)  

2.关系代数

进入http://dbis-uibk.github.io/relax/calc.htm#网站,选择Wikipedia – Relational algebra (en)数据库进行练习!

查询练习应包含π σ ÷ ⨝ ⟕ 等运算符。

2.1 字段描述

Employee  雇员      Name string      EmpId number      DeptName string  Dept 部门      DeptName string      Manager string  Completed 已完成      Student string      Task string      DBProject      Task string  Car 汽车      CarModel string      CarPrice number  Boat 船      BoatModel string      BoatPrice number  

2.2关系代数

  • 自然连接练习
π Name, DeptName σ DeptName = 'Sales' (Employee ⨝ Dept)  
  • 除练习

Completed表

Completed.Student

Completed.Task

Fred

Database1

Fred

Database2

Fred

Compiler1

Eugene

Database1

Eugene

Compiler1

Sarah

Database1

Sarah

Database2

DBProject表:

DBProject.Task

Database1

Database2

( Completed ÷ DBProject ) 结果:

Completed.Student

Fred

Sarah

Employee表:

Employee.Name

Employee.EmpId

Employee.DeptName

Harry

3415

Finance

Sally

2241

Sales

George

3401

Finance

Harriet

2202

Sales

Tim

1123

Executive

自然连接:

(Completed ÷ DBProject) ⨝ Employee

Completed.Student

Employee.Name

Employee.EmpId

Employee.DeptName

Fred

Harry

3415

Finance

Fred

Sally

2241

Sales

Fred

George

3401

Finance

Fred

Harriet

2202

Sales

Fred

Tim

1123

Executive

Sarah

Harry

3415

Finance

Sarah

Sally

2241

Sales

Sarah

George

3401

Finance

Sarah

Harriet

2202

Sales

Sarah

Tim

1123

Executive

选择结果:

Employee.Name

Employee.DeptName

Harry

Finance

Sally

Sales

George

Finance

Harriet

Sales

Tim

Executive

综上的关系代数为:

π Name, DeptName ( ( Completed ÷ DBProject ) ⨝ Employee )  
  • 并练习

( Completed ÷ DBProject ) 结果:

Completed.Student

Fred

Sarah

Employee表投影出Name列结果:

Employee.Name

Harry

Sally

George

Harriet

Tim

并:

π Name (Employee) ∪ (Completed ÷ DBProject)  

Employee.Name

Harry

Sally

George

Harriet

Tim

Fred

Sarah

  • 差练习

对Employee投影出DeptName:

π DeptName (Employee)  

Employee.DeptName

Finance

Sales

Executive

对Dept投影出DeptName:

π DeptName (Dept)  

Dept.DeptName

Sales

Production

两张表的DeptName做差运算:

π DeptName (Employee) - π DeptName (Dept)  

Employee.DeptName

Finance

Executive

  • 左外连接

Employee表:

Employee.Name

Employee.EmpId

Employee.DeptName

Harry

3415

Finance

Sally

2241

Sales

George

3401

Finance

Harriet

2202

Sales

Tim

1123

Executive

Dept表:

Dept.DeptName

Dept.Manager

Sales

Harriet

Production

Charles

Employee left join Dept结果:

Employee ⟕ Dept  

Employee.Name

Employee.EmpId

Employee.DeptName

Dept.Manager

Harry

3415

Finance

null

Sally

2241

Sales

Harriet

George

3401

Finance

null

Harriet

2202

Sales

Harriet

Tim

1123

Executive

null

投影选择列:

π Name, DeptName, Manager (Employee ⟕ Dept)  

Employee.Name

Employee.DeptName

Dept.Manager

Harry

Finance

null

Sally

Sales

Harriet

George

Finance

null

Harriet

Sales

Harriet

Tim

Executive

null

  • 选择练习

Car表:

Car.CarModel

Car.CarPrice

CarA

20000

CarB

30000

CarC

50000

Boat表:

Boat.BoatModel

Boat.BoatPrice

Boat1

10000

Boat2

40000

Boat3

60000

自然连接:

Car ⨝ Boat  

Car.CarModel

Car.CarPrice

Boat.BoatModel

Boat.BoatPrice

CarA

20000

Boat1

10000

CarA

20000

Boat2

40000

CarA

20000

Boat3

60000

CarB

30000

Boat1

10000

CarB

30000

Boat2

40000

CarB

30000

Boat3

60000

CarC

50000

Boat1

10000

CarC

50000

Boat2

40000

CarC

50000

Boat3

60000

选择:

σ CarPrice > BoatPrice (Car ⨝ Boat)  

Car.CarModel

Car.CarPrice

Boat.BoatModel

Boat.BoatPrice

CarA

20000

Boat1

10000

CarB

30000

Boat1

10000

CarC

50000

Boat1

10000

CarC

50000

Boat2

40000