如何在SQL连接的情况下将SQL转换为关系代数



这些天我正在研究SQL和关系代数。我被困在以下问题上。我能够为以下问题制作一个 SQL,但不知何故,我所做的关系代数看起来不对。

以下是我的表格-

Employee ( EmployeeId , EmployeeName, EmployeeCountry)
Training ( TrainingCode , TrainingName, TrainingType, TrainingInstructor)
Outcome EmployeeId, TrainingCode , Grade) Id

所有键都用星号 * 指定。

下面是问题及其SQL查询,可以正常工作-

查找参加过每次培训的员工的 ID。

SQL Qyery:

SELECT X.EmployeeID
FROM   (SELECT EmployeeID, COUNT(*) AS NumClassesTaken 
        FROM OutCome GROUP BY EmployeeID ) 
        AS X
  JOIN (SELECT COUNT(*) AS ClassesAvailable 
        FROM Training) 
        AS Y
  ON X.NumClassesTaken = Y.ClassesAvailable

我无法理解上述查询的关系代数是什么?谁能帮我?

关系代数:

找一个trainingEmployee,他拿了每%

实际上,在关系代数中,您需要除法运算符r ÷ s运算符:

当我们希望用ALL表达查询时,使用 “all”

例:

  1. 哪些人在该国的银行ALL拥有银行账户?
  2. 检索Jon Smith Training (从事的项目的员工的姓名?

另请阅读除法运算符的滑动:

您还需要查询 % 运算符才能查询:"已参加所有培训的员工"。

首先列出所有训练代码:

TrainingCode , TrainingName, TrainingType, TrainingInstructor) TrainingCode

主键为: TC =

TrainingCode ET =(培训(

一对员工 ID 和培训代码:员工参加培训。

EmployeeId, TrainingCode Result =(结果(

应用

%除法运算,该操作通过培训代码为您提供所需的员工代码,然后应用投影以仅过滤掉员工代码。

EmployeeId universal quantification (ET % TC(

《数据库系统基础》是我一直拿在手里的书。

6.3.4 除法操作

定义除法操作是为了方便处理 涉及allT(Y) = R(Z) % S(X)的查询 条件。大多数以SQL作为主要查询的RDBMS实现 语言不直接实现除法。SQL有圆形的方式 使用"存在"、"包含"和"不存在"处理查询类型 关键词。

一般的 DIVISION 运算适用于两个关系X ⊆ Z 其中 Y = Z - XZ = X ∪ Y(因此Y(;也就是说R S是不是 X = {A}, Z = {A, B} then Y = {B}的属性,例如 BS 属性在与 T(Y) 的关系中不存在。

t DIVISION 的结果是一个关系,包括一个元组tR如果 元组RtR[Y] = t 的关系出现 tR[X] = tS every S元组 t .这意味着。要使元组T出现在 DIVISION 的结果t中,R的值必须与 { 中的每个元组一起出现在S中。

我还想补充一点,关系代数运算集σ , , , Χ , - } %即选择、投影、连接、笛卡尔交叉和减号是一个完整的集合;也就是说,任何其他原始的关系代数运算都可以表示为该集合中的一系列运算。除法运算也可以用 -T1 <-- ∏Y(R)运算的形式表示,如下所示:


T2 <-- ∏Y((S Χ T1) - R)
T3 <-- T1 - T2 CC_73

要使用基本的关系代数运算来表示您的问题,只需将 R 替换为结果,将 S 替换为训练,将属性集 Y 替换为 EmployeeId。

我希望这有所帮助。

最新更新