📜  关系代数中的扩展运算符

📅  最后修改于: 2021-09-09 11:29:32             🧑  作者: Mango

关系代数中关系模型和基本运算符的基本思想:

关系模型

关系代数中的基本运算符

扩展运算符是可以从基本运算符来导出这些运算符。关系代数中主要有以下三种扩展运算符:

  • 加入
  • 路口
  • 划分 

用于理解扩展运算符的关系为 STUDENT、STUDENT_SPORTS、ALL_SPORTS 和 EMPLOYEE,分别如表 1、表 2、表 3 和表 4 所示。

学生

ROLL_NO NAME ADDRESS PHONE AGE
1 RAM DELHI 9455123451 18
2 RAMESH GURGAON 9652431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH DELHI 9156768971 18

表格1

STUDENT_SPORTS

ROLL_NO SPORTS
1 Badminton
2 Cricket
2 Badminton
4 Badminton

表 2

ALL_SPORTS

SPORTS
Badminton
Cricket 

表3

员工

EMP_NO NAME ADDRESS PHONE AGE
1 RAM DELHI 9455123451 18
5 NARESH HISAR 9782918192 22
6 SWETA RANCHI 9852617621 21
4 SURESH DELHI 9156768971 18

表 4

交集 (∩):两个关系 R1 和 R2 的交集只有在 R1 和 R2 是并兼容的情况下才能计算(这两个关系应该具有相同数量的属性,并且两个关系中对应的属性具有相同的域)。当 R1 R2 应用于两个关系时,交运算符将给出与 R1 和 R2 中的元组的关系。句法:

Relation1 ∩ Relation2
Example: Find a person who is student as well as employee-  STUDENT ∩ EMPLOYEE  

就基本运算符(联合和减号)而言:

STUDENT ∩ EMPLOYEE = STUDENT + EMPLOYEE - (STUDENT U EMPLOYEE) 

结果:

ROLL_NO NAME ADDRESS PHONE AGE
1 RAM DELHI 9455123451 18
4 SURESH DELHI 9156768971 18

Conditional Join(⋈ c )当您想根据某些条件连接两个或多个关系时,使用条件连接。示例:选择员工中 ROLL_NO 大于 EMP_NO 的学生

STUDENT⋈c STUDENT.ROLL_NO>EMPLOYEE.EMP_NOEMPLOYEE

在基本运算符(交叉产品和选择)方面:

σ (STUDENT.ROLL_NO>EMPLOYEE.EMP_NO)(STUDENT×EMPLOYEE)

结果:

ROLL_NO NAME ADDRESS PHONE AGE EMP_NO NAME ADDRESS PHONE AGE
2 RAMESH GURGAON 9652431543 18 1 RAM DELHI 9455123451 18
3 SUJIT ROHTAK 9156253131 20 1 RAM DELHI 9455123451 18
4 SURESH DELHI 9156768971 18 1 RAM DELHI 9455123451 18

Equijoin(⋈): Equijoin 是条件连接的一种特殊情况,其中一对属性之间只有相等条件成立。由于在 equijoin 的结果中两个属性的值将相等,因此结果中只会出现一个属性。

示例:选择员工中 ROLL_NO 等于 EMP_NO 的学生

STUDENT⋈STUDENT.ROLL_NO=EMPLOYEE.EMP_NOEMPLOYEE

在基本运算符(叉积、选择和投影)方面:

∏(STUDENT.ROLL_NO, STUDENT.NAME, STUDENT.ADDRESS, STUDENT.PHONE, STUDENT.AGE EMPLOYEE.NAME, EMPLOYEE.ADDRESS, EMPLOYEE.PHONE, EMPLOYEE>AGE)(σ (STUDENT.ROLL_NO=EMPLOYEE.EMP_NO) (STUDENT×EMPLOYEE))

结果:

ROLL_NO NAME ADDRESS PHONE AGE NAME ADDRESS PHONE AGE
1 RAM DELHI 9455123451 18 RAM DELHI 9455123451 18
4 SURESH DELHI 9156768971 18 SURESH DELHI 9156768971 18

自然连接(⋈):这是等值连接的一种特殊情况,其中等式条件对关系 R 和 S(应用连接操作的关系)中具有相同名称的所有属性成立。在两个关系上应用自然连接时,不需要明确写出相等条件。 Natural Join 也只会返回相似的属性一次,因为它们的值在结果关系中是相同的。

示例:选择 ROLL_NO 等于 STUDENT_SPORTS 的 ROLL_NO 的学生为:

STUDENT⋈STUDENT_SPORTS

在基本运算符(叉积、选择和投影)方面:

∏(STUDENT.ROLL_NO, STUDENT.NAME, STUDENT.ADDRESS, STUDENT.PHONE, STUDENT.AGE STUDENT_SPORTS.SPORTS)(σ (STUDENT.ROLL_NO=STUDENT_SPORTS.ROLL_NO) (STUDENT×STUDENT_SPORTS))

结果:

ROLL_NO NAME ADDRESS PHONE AGE SPORTS
1 RAM DELHI 9455123451 18 Badminton
2 RAMESH GURGAON 9652431543 18 Cricket
2 RAMESH GURGAON 9652431543 18 Badminton
4 SURESH DELHI 9156768971 18 Badminton

自然连接默认为内连接,因为不满足连接条件的元组不会出现在结果集中。例如; STUDENT 中 ROLL_NO 3 的元组与 STUDENT_SPORTS 中的任何元组都不匹配,因此它不是结果集的一部分。

Left Outer Join(⟕):当对两个关系R和S应用join时,一些不满足join条件的R或S的元组不会出现在结果集中。但是 Left Outer Joins 给出了结果集中 R 的所有元组。对于 S 的属性,不满足连接条件的 R 元组的值为 NULL。

示例:选择员工的 ROLL_NO 大于 EMP_NO 的学生以及其他学生的详细信息

STUDENT⟕STUDENT.ROLL_NO>EMPLOYEE.EMP_NOEMPLOYEE

结果

ROLL_NO NAME ADDRESS PHONE AGE EMP_NO NAME ADDRESS PHONE AGE
2 RAMESH GURGAON 9652431543 18 1 RAM DELHI 9455123451 18
3 SUJIT ROHTAK 9156253131 20 1 RAM DELHI 9455123451 18
4 SURESH DELHI 9156768971 18 1 RAM DELHI 9455123451 18
1 RAM DELHI 9455123451 18 NULL NULL NULL NULL NULL

Right Outer Join(⟖):当对两个关系R和S应用join时,一些不满足join条件的R或S的元组不会出现在结果集中。但是 Right Outer Joins 给出了结果集中 S 的所有元组。对于 R 的属性,不满足连接条件的 S 元组的值为 NULL。

示例:选择员工的 ROLL_NO 大于 EMP_NO 的学生以及其他员工的详细信息

STUDENT⟖STUDENT.ROLL_NO>EMPLOYEE.EMP_NOEMPLOYEE

结果:

ROLL_NO NAME ADDRESS PHONE AGE EMP_NO NAME ADDRESS PHONE AGE
2 RAMESH GURGAON 9652431543 18 1 RAM DELHI 9455123451 18
3 SUJIT ROHTAK 9156253131 20 1 RAM DELHI 9455123451 18
4 SURESH DELHI 9156768971 18 1 RAM DELHI 9455123451 18
NULL NULL NULL NULL NULL 5 NARESH HISAR 9782918192 22
NULL NULL NULL NULL NULL 6 SWETA RANCHI 9852617621 21
NULL NULL NULL NULL NULL 4 SURESH DELHI 9156768971 18

Full Outer Join(⟗):当对两个关系R和S应用join时,一些R或S的元组不会出现在不满足join条件的结果集中。但是 Full Outer Joins 给出了结果集中所有 S 的元组和 R 的所有元组。不满足连接条件的 S 元组对于 R 的属性将具有 NULL 值,反之亦然。

示例:选择员工的 ROLL_NO 大于 EMP_NO 的学生和其他员工的详细信息以及其他学生

STUDENT⟗STUDENT.ROLL_NO>EMPLOYEE.EMP_NOEMPLOYEE

结果:

ROLL_NO NAME ADDRESS PHONE AGE EMP_NO NAME ADDRESS PHONE AGE
2 RAMESH GURGAON 9652431543 18 1 RAM DELHI 9455123451 18
3 SUJIT ROHTAK 9156253131 20 1 RAM DELHI 9455123451 18
4 SURESH DELHI 9156768971 18 1 RAM DELHI 9455123451 18
NULL NULL NULL NULL NULL 5 NARESH HISAR 9782918192 22
NULL NULL NULL NULL NULL 6 SWETA RANCHI 9852617621 21
NULL NULL NULL NULL NULL 4 SURESH DELHI 9156768971 18
1 RAM DELHI 9455123451 18 NULL NULL NULL NULL NULL

除法运算符 (÷):除法运算符A ÷ B 可用于以下条件:

  • B 的属性是 A 的属性的真子集。
  • 除法运算符返回的关系将具有属性 =(A 的所有属性 – B 的所有属性)
  • 除法运算符返回的关系将返回关系 A 中与每个 B 的元组相关联的那些元组。

考虑上面表 2 和表 3 中给出的 STUDENT_SPORTS 和 ALL_SPORTS 关系。

将除法运算符为

STUDENT_SPORTS÷ ALL_SPORTS
  • 该操作是有效的,因为 ALL_SPORTS 中的属性是 STUDENT_SPORTS 中属性的正确子集。
  • 结果关系中的属性将具有属性 {ROLL_NO,SPORTS}-{SPORTS}=ROLL_NO
  • 结果关系中的元组将具有与所有 B 的元组 {Badminton, Cricket} 相关联的 ROLL_NO。 ROLL_NO 1 和 4 仅与羽毛球相关。 ROLL_NO 2 与 B 的所有元组相关联。因此结果关系将是:
ROLL_NO
2

关系代数运算符概述

上一年的门问题

https://www.geeksforgeeks.org/gate-gate-cs-2012-question-50/
https://www.geeksforgeeks.org/gate-gate-cs-2012-question-43/