小编典典

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

sql

这些天,我正在研究SQL和关系代数。我被困在以下问题上。我可以针对以下问题创建SQL,但是以某种方式我制作的关系代数看起来不正确。

以下是我的表格-

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

所有键都用星号*指定。

以下是该问题及其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

我无法理解上述查询的关系代数是什么?有人可以帮我吗?


阅读 189

收藏
2021-05-05

共1个答案

小编典典

关系代数:

查找IdEmployee谁采取了 每天 training

实际上,您需要在关系代数中进行
除法%运算

r聽梅聽s当我们希望用以下方式表达查询时使用鈥渁ll鈥�

例子:

  1. 这听的人听有无听一听银行账户听,在听听ALL听的听银行听在听的听的国家吗?
  2. 检索从事所从事ALL项目的员工的姓名Jon Smith

另请阅读除法运算符的这张幻灯:

您还需要查询%运算符来查询:“已接受 所有 培训的员工”。

首先列出所有培训代码:

Training ( TrainingCode, TrainingName, TrainingType, TrainingInstructor)

主键是 TrainingCode

TC = TrainingCode(训练)

一对employeeID和trainingCode:一名员工参加了培训。

ET = EmployeeId, TrainingCode(结果)

应用%除法操作,该操作可为您提供所需的带有trainingCode的员工代码,然后应用投影仅过滤出员工代码。

Result = EmployeeId(ET%TC)

我经常掌握《数据库系统基础知识》一书。

6.3.4除法运算

除法运算是为了方便定义用于与查询处理,其涉及universal quantification或all 条件。大多数将SQL作为主要查询语言的RDBMS实现并不直接实现除法。SQL具有使用EXISTS,CONTAINS和NOT EXISTS关键字处理查询类型的全面方法。

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

T(Y)除法的结果是一个关系包括一个元组t,如果元组出现在关系与 以及与 为元组 。这意味着。为了使元组出现在DIVISION的结果中,必须将的值 与中的每个元组结合出现。 tRRtR[Y] = ttR[X] = tSeveryStTtRS除法运算是为了方便定义用于与查询处理,其涉及universal quantificationall

条件。大多数将SQL作为主要查询语言的RDBMS实现并不直接实现除法。SQL具有使用EXISTS,CONTAINS和NOT
EXISTS关键字处理查询类型的全面方法。

一般的DIVISION运算适用于两个关系T(Y) = R(Z) % S(X),其中X 鈯� ZY = Z - X(因此Z = X 鈭� Y);这是Y属性的集合,R不是属性的属性,S例如X = {A}, Z = {A, B} then Y = {B}B
关系中不存在属性S

T(Y)除法的结果是一个关系包括一个元组 t ,如果元组出现在关系与 以及与 为元组
。这意味着。为了使元组出现在DIVISION的结果中,必须将的值 与中的每个元组结合出现。 _t R_``R`` _t R_[Y] = _t_`` _t R_[X] = _t_ S everyS tT tR``S

我也想补充的是,组关系代数运算,即选择,投影,连接,笛卡尔十字和减号是一个 完整的 集;
也就是任何其他原始关系代数运算都可以表示为该集合中的一系列运算。除法运算 ,也可以在的形式表示,和 操作如下:{σ,∏,⋈,Χ,-}%∏⋈-*

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

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

希望对您有所帮助。

2021-05-05