相关表格是:
TRAIN(列车代码、列车类型、出发站、目的地站)
列出从伦敦出发前往肯特的火车详细信息。
问题很简单,我到处寻找基本答案,但找不到。
这是我到目前为止所想到的,但我不知道它是否正确,或者 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 命令代替?我真的不知道,尽管这是一个如此简单的问题。谁能帮我吗?
最佳答案
即使我们忽略诸如 π
与 PROJECT OVER
之类的细微语法差异,关系代数也不存在单一版本。他们甚至都不具有相同的关系概念。 您对 SELECT
/RESTRICT
的定义是什么?我们不能告诉你,你必须告诉我们。
如果要使用的关系代数版本允许在 SELECT
中任意嵌套条件,则您的 AND
有效。最初的关系代数只允许单一的等式或不等式。您需要找出“关系代数”和“SELECT
”对您的作业意味着什么。但无论哪种方式你都可以写:
SELECT (SELECT TRAIN WHERE departure-station = 'LONDON')
WHERE destination-station = 'KENT'
您的长格式毫无意义地设置了TABLE3
,不使用它,然后再次设置它。此外,您的长格式无效,因为 INTERSECT
需要两个具有相同属性集的关系。但你是对的,INTERSECT
与 AND 平行。 NATURAL JOIN
也是如此。每个表(给定或查询)都有一个谓词,即由属性参数化的语句模板,给出元组成员资格条件。例如,TRAIN
是元组,其中(类似于)train-type 类型的火车train-code 从出发站出发> 前往目的地车站。 INTERSECT
和 NATURAL JOIN
返回一个关系中 AND 位于另一个关系中的元组,即满足一个关系的谓词 AND> 与其他人的。同样,UNION
计算 OR,MINUS
计算 AND NOT,并且 ... WHERE
条件
计算... AND 条件。例如,您的 SELECT
与 AND
是元组,其中 train-type 类型的火车 train-code 来自 出发站至目的地站 AND 出发站 = '伦敦' AND 目的地站 = '肯特'。 PROJECT
relation
OVER
保留的属性
计算 FOR一些(值)属性被删除,谓词。例如,TABLE4
是元组,其中 FOR SOME train-type、出发站 & 目的地站、 火车类型类型的火车代码从出发站到目的地站并且目的地站 = '肯特'。
因此,另一个不使用 AND
的答案是 TABLE1 INTERSECT TABLE2
。你为什么要做所有其他事情? (例如,您进行了一些投影,然后将它们与原始投影结合起来;这总是给出什么?)
参见this answer .
关于relational-database - 关系代数如何选择两个条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41923574/