关系代数中关系模型和基本运算符的基本思想:
关系模型
关系代数中的基本运算符
扩展运算符是可以从基本运算符来导出这些运算符。关系代数中主要有以下三种扩展运算符:
- 加入
- 路口
- 划分
用于理解扩展运算符的关系为 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/