赞
踩
关系数据语言可以分为三类: 关系代数、关系演算和介于关系代数与关系演算之间的语言 SQL。
下面专门讲述用对关系进行运算来表达查询要求的关系代数。关系代数的运算对象是关系,运算结果也是关系。关系代数用到的运算符包括四类:集合运算符、专门的关系运算符、算术比较运算符和逻辑运算符,其中比较运算符和逻辑运算符是用来辅助运算的专门关系运算符。
传统的集合运算包括并、交、差和广义笛卡儿积等。集合运算把关系看做元组的集合,从水平(行)方向进行运算,广义笛卡儿积把两个关系的元组以所有可能的方式组成对。专门的关系运算包括选择、投影、连接和除等,既从行又从列的方向进行运算。“选择”会删除某些行;“投影”会删除某些列; 各种连接运算将两个关系的元组中有选择地组成对,构成一个新关系。
传统的集合运算包括并、交、差、广义笛卡儿积四种运算。
设关系 R和S 是相互兼容的,R和S 必须同类型(属性集相同、次序相同,但属性名可以不同)
两关系的交集可以通过差运算导出: R∩S= R-(R-S)
示例:R(X, Z) 关系和 X = {S} 为例,我们有:
选择运算是关系代数中非常重要的一项运算,它对应于 SQL 中的 WHERE
子句。按照指定的条件筛选出满足条件的元组(行)。
如果我们有一个学生表 Students(ID,Name,Age,Major),并且我们想选择所有主修计算机科学的学生,我们可以使用以下选择表达式:
σ M a j o r = " C o m p u t e r S c i e n c e " ( S t u d e n t s ) σ_{Major}="Computer Science"(Students) σMajor="ComputerScience"(Students)
这将返回一个新的关系,其中包含了所有满足条件 Major="Computer Science"Major=“Computer Science” 的元组。
在 SQL 中,同样的操作会用下面的查询来完成:
SELECT * FROM Students WHERE Major = 'Computer Science';
投影运算是关系代数中的另一种基本操作,它对应于 SQL 中的 SELECT
语句(特定列的选择)。投影用于提取关系中的特定列,并创建一个新的关系,该关系仅包含指定的列。
假设我们有一个学生表 Students(ID,Name,Age,Major),并且我们只对学生的名字和专业感兴趣,我们可以使用以下投影表达式:
π N a m e , M a j o r ( S t u d e n t s ) π_{Name, Major}(Students) πName,Major(Students)
这将返回一个新的关系,其中仅包含两列:Name 和 Major。
在 SQL 中,同样的操作会用下面的查询来完成:
SELECT Name, Major FROM Students;
等值连接 (Equi-Join)
自然连接 (Natural Join)
假设有两个关系 R 和 S,其中 R 中有属性 A 和 S 中有属性 B,要在 A 和 B 上进行等值连接,你会写:
R ⋈ A = B S R⋈_{A=B}S R⋈A=BS
这将返回一个新的关系,其中包括了 R 和 S 的所有元组对,这些元组对在 A 和 B 上的值相等。
在 SQL 中,等值连接可以使用 INNER JOIN
关键字来实现,而自然连接通常需要使用 JOIN
关键字加上适当的 ON
子句来指定连接条件。
外连接允许在连接结果中包含即使在一个关系中没有匹配元组也会出现的行。外连接有以下三种类型:
左外连接 (Left Outer Join)
NULL
。右外连接 (Right Outer Join)
NULL
。全外连接 (Full Outer Join)
NULL
。除运算(Division)在关系代数中是一种稍微复杂一点的运算,它用于处理如“找到所有…”这类的查询。除运算找到所有在一个关系中的元组,它们与另一个关系中所有元组相关联。
除运算是一种同时考虑行和列的运算。给定两个关系 R(X, Y) 和 S(Y, Z),其中 X、Y、Z 为属性组,除运算的结果是一个新关系,该关系包含了 R 中那些与 S 中 Y 属性上所有值都有关联的 X 属性上的值。
给定 R(X, Y) 和 S(Y, Z),除运算定义为:
R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ π Y ( S ) ⊆ Y t r [ X ] } R÷S=\{t_r[X]∣t_r∈R∧π_Y(S)⊆Y_{tr[X]}\} R÷S={tr[X]∣tr∈R∧πY(S)⊆Ytr[X]}
其中 Y t r [ X ] Y_{t_r[X]} Ytr[X] 是 R 中 X 值为 t r [ X ] t_r[X] tr[X] 的象集,即 R 中所有 X 属性值为 t r [ X ] t_r[X] tr[X] 的元组在 Y 上的值的集合。
在您的例子中,我们有关系 R(AB, CD) 和 S(CD),并且我们想找到所有与 S 中所有 CD 值都有关联的 AB 值。
因此,R/S 的结果是关系中包含 (a, b) 和 (c, k) 的新关系。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。