关系模型基础:关系模型
关系代数是一种过程查询语言,它将关系作为输入并返回关系作为输出。有一些基本的运算符可以应用于关系以产生所需的结果,我们将一一讨论。我们将分别使用表 1、表 2 和表 3 中给出的 STUDENT_SPORTS、EMPLOYEE 和 STUDENT 关系来了解各种运算符。
表 1 : STUDENT_SPORTS
ROLL_NO | SPORTS |
1 | Badminton |
2 | Cricket |
2 | Badminton |
4 | Badminton |
表 2 : 雇员
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 |
表 3:学生
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 |
选择运算符(σ):选择运算符用于根据某些条件从关系中选择元组。句法:
σ (Cond)(Relation Name)
从表1给出的学生关系中提取年龄大于18岁的学生
σ (AGE>18)(STUDENT)
结果:
ROLL_NO | NAME | ADDRESS | PHONE | AGE |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
投影运算符(∏):投影运算符用于从关系中投影特定列。句法:
∏(Column 1,Column 2….Column n)(Relation Name)
从表 3 中给出的 STUDENT 关系中提取 ROLL_NO 和 NAME
∏(ROLL_NO,NAME)(STUDENT)
结果:
ROLL_NO | NAME |
1 | RAM |
2 | RAMESH |
3 | SUJIT |
4 | SURESH |
注意:如果投影后的结果关系有重复的行,它将被删除。例如: ∏ (ADDRESS) (STUDENT) 将删除一个值为 DELHI 的重复行并返回三行。
叉积(X):叉积用于连接两个关系。对于 Relation1 的每一行,Relation2 的每一行都连接在一起。如果 Relation1 有 m 个元组并且 Relation2 有 n 个元组,则 Relation1 和 Relation2 的叉积将有 m X n 个元组。句法:
Relation1 X Relation2
对表 1 中给出的 STUDENT 关系和表 2 中给出的 STUDENT_SPORTS 关系应用叉积,
STUDENT X STUDENT_SPORTS
结果:
ROLL_NO | NAME | ADDRESS | PHONE | AGE | ROLL_NO | SPORTS |
1 | RAM | DELHI | 9455123451 | 18 | 1 | Badminton |
1 | RAM | DELHI | 9455123451 | 18 | 2 | Cricket |
1 | RAM | DELHI | 9455123451 | 18 | 2 | Badminton |
1 | RAM | DELHI | 9455123451 | 18 | 4 | Badminton |
2 | RAMESH | GURGAON | 9652431543 | 18 | 1 | Badminton |
2 | RAMESH | GURGAON | 9652431543 | 18 | 2 | Cricket |
2 | RAMESH | GURGAON | 9652431543 | 18 | 2 | Badminton |
2 | RAMESH | GURGAON | 9652431543 | 18 | 4 | Badminton |
3 | SUJIT | ROHTAK | 9156253131 | 20 | 1 | Badminton |
3 | SUJIT | ROHTAK | 9156253131 | 20 | 2 | Cricket |
3 | SUJIT | ROHTAK | 9156253131 | 20 | 2 | Badminton |
3 | SUJIT | ROHTAK | 9156253131 | 20 | 4 | Badminton |
4 | SURESH | DELHI | 9156768971 | 18 | 1 | Badminton |
4 | SURESH | DELHI | 9156768971 | 18 | 2 | Cricket |
4 | SURESH | DELHI | 9156768971 | 18 | 2 | Badminton |
4 | SURESH | DELHI | 9156768971 | 18 | 4 | Badminton |
Union (U):两个关系 R1 和 R2 上的并集只有在 R1 和 R2 是并集兼容的情况下才能计算(这两个关系应该具有相同数量的属性,并且两个关系中的对应属性具有相同的域)。联合运算符应用于两个关系 R1 和 R2 时将给出与 R1 或 R2 中的元组的关系。 R1 和 R2 中的元组在结果关系中只会出现一次。句法:
Relation1 U Relation2
查找学生或雇员的人,我们可以使用 Union运算符,例如:
STUDENT U EMPLOYEE
结果:
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 |
5 | NARESH | HISAR | 9782918192 | 22 |
6 | SWETA | RANCHI | 9852617621 | 21 |
减号 (-):两个关系 R1 和 R2 的减号只能在 R1 和 R2 是联合兼容的情况下计算。当 R1-R2 应用于两个关系时,减号运算符将给出与 R1 中但不在 R2 中的元组的关系。句法:
Relation1 - Relation2
找到学生但不是雇员的人,我们可以使用减号运算符,例如:
STUDENT - EMPLOYEE
结果:
ROLL_NO | NAME | ADDRESS | PHONE | AGE |
2 | RAMESH | GURGAON | 9652431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
重命名(ρ):重命名运算符用于为关系赋予另一个名称。句法:
ρ(Relation2, Relation1)
要将 STUDENT 关系重命名为 STUDENT1,我们可以使用重命名运算符,例如:
ρ(STUDENT1, STUDENT)
如果你想用 ROLL_NO 和 STUDENT 的 NAME 创建关系 STUDENT_NAMES,可以使用重命名运算符来完成:
ρ(STUDENT_NAMES, ∏(ROLL_NO, NAME)(STUDENT))
扩展关系代数算子 关系代数算子概述
上一年的门问题
https://www.geeksforgeeks.org/gate-gate-cs-2012-question-50/
https://www.geeksforgeeks.org/gate-gate-cs-2012-question-43/