关系代数我如何选择两个条件?

时间:2017-01-29 17:05:29

标签: sql oracle relational-database algebra relational-algebra

相关表格是:

列车(列车代码,列车类型,出发站,目的地站)

列出从伦敦出发并开往KENT的列车详情。

这个问题非常简单,我到处寻找一个基本的答案,却找不到答案。

这是我到目前为止所提出的,但我不知道它是否正确,或者甚至可以在关系代数中使用AND:

SELECT TRAIN WHERE departure-station = 'LONDON' AND destination-station = 'KENT'

这是对的吗?我在网上找不到关于你是否可以使用AND的任何信息。如果这不起作用,我认为我的答案应该是这样的:

SELECT TRAIN WHERE departure-station = 'LONDON' GIVING TABLE1
SELECT TRAIN WHERE destination-station = 'KENT' GIVING TABLE2
PROJECT TABLE1 OVER train-code GIVING TABLE3
PROJECT TABLE2 OVER train-code GIVING TABLE4
TABLE1 INTERSECT TABLE2 GIVING TABLE3
PROJECT TABLE3 OVER train-code, train-type, departure-station, destination-station GIVING RESULT

这似乎对我来说太长了,反正可能不正确。也许我需要使用JOIN命令?我真的不知道,即使这是一个如此简单的问题。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

我不熟悉Oracle SQL,但我熟悉MySQL,我相信基本语法是一样的。您对AND的使用看起来是正确的,但看起来您在查询中缺少FROM关键字。如果该表被称为TRAIN,请尝试:

SELECT * FROM TRAIN WHERE departure-station = 'LONDON' AND destination-station = 'KENT'

答案 1 :(得分:1)

“和”在关系代数中肯定是有效的,可以这样写:

σ departure-station = 'LONDON' AND destination-station = 'KENT' (TRAIN)

这是一个基础教程,但它定义了大多数RA概念:

https://www.tutorialspoint.com/dbms/relational_algebra.htm

答案 2 :(得分:1)

关系代数没有单一版本,即使我们忽略了π vs PROJECT OVER等琐碎的语法差异。他们甚至都不具备相同的 relation 概念。对于SELECT / RESTRICT给出了的定义是什么?我们无法告诉你,你必须告诉我们。

如果要使用的关系代数版本允许AND中的任意嵌套条件,则SELECT有效。原始的关系代数只允许单一的相等或不等式。你需要找出"关系代数" &安培; " SELECT"你的任务意味着什么。但无论哪种方式,你都可以写:

SELECT (SELECT TRAIN WHERE departure-station = 'LONDON')
WHERE destination-station = 'KENT'

你的长篇文章毫无意义地设置了TABLE3,没有使用它,然后再次设置它。此外,您的长格式无效,因为INTERSECT需要与相同属性集的两个关系。但你是对的INTERSECT平行于AND。 NATURAL JOIN也是如此。每个表(给定或查询)都有一个谓词,即由属性参数化的语句模板,给出元组成员资格条件。例如TRAIN是元组,其中(类似的)训练类型为 train-type 列车代码出发站到< EM>目的地站。 INTERSECT&amp; NATURAL JOIN返回一个关系中的元组 AND 在另一个关系中,即满足一个关系的谓词 AND ed with other&#39; s 。同样UNION计算OR,MINUS计算AND NOT,而WHERE condition 计算... AND 条件。例如,SELECTAND的元组是 train-type 类型的火车列车代码来自出发站到目的地站出发站 =&#39;伦敦&#39; AND 目的地站 =&#39; KENT&#39;。 PROJECT relation OVER attributes kept 计算FOR SOME(值)属性被删除谓词。例如,TABLE4是元组,其中FOR SOME 列车类型出发站&amp; train-type 目的地站列车代码出发站目的地-station 目的地站 =&#39; KENT&#39;。

另一个不使用AND的答案是TABLE1 INTERSECT TABLE2。你为什么要做其他所有事情? (例如,你进行了一些预测,然后将它们与原始图像一起加入;这总是给出了什么?)

请参阅this answer