关系代数怎么可以让我SELECT两个条件?

Relational Algebra how can I SELECT two conditions?

相关的table是:

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

列出从伦敦出发前往肯特的列车详情。

问题很简单,我到处找基本答案,但找不到。

这是我到目前为止的想法,但我不知道它是否正确,或者 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 命令?我真的不知道,尽管这是一个如此简单的问题。谁能帮帮我?

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

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

"And"在关系代数中当然有效,可以这样写:

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

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

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

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

如果要使用的关系代数版本允许 SELECT 中的任意嵌套条件,则您的 AND 有效。最初的关系代数只允许一个相等或不等式。您需要找出 "relational algebra" & "SELECT" 对您的作业意味着什么。但无论哪种方式你都可以写:

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

您的长格式毫无意义地设置了 TABLE3,没有使用它,然后再次设置它。此外,您的长格式无效,因为 INTERSECT 需要两个具有相同属性集的关系。但是你是对的,INTERSECT 平行于 AND。 NATURAL JOIN 也是如此。每个table(给定或查询)都有一个谓词,即由属性参数化的语句模板,给出元组成员资格条件。例如 TRAIN 是元组,其中(类似于)训练 train-code 类型 train-type 来自 departure-stationdestination-stationINTERSECT & NATURAL JOIN return 在一个关系中的元组 AND 在另一个关系中,即满足一个关系的谓词 AND和其他人一起。同样,UNION 计算 OR,MINUS 计算 AND NOT,... WHEREcondition 计算 ... AND 条件。例如,你的 SELECTAND 是元组,其中 train-code 类型 train-type 去从 departure-stationdestination-stationdeparture-station = 'LONDON' 和 destination-station = 'KENT'。 PROJECTrelationOVERattributes kept 计算 FOR SOME(值)属性下降谓词。例如 TABLE4 是元组,其中 FOR SOME train-type, departure-station & destination-stationtrain-code 类型 train-type 来自 departure-stationdestination-stationdestination-station = 'KENT'.

所以另一个不使用 AND 的答案是 TABLE1 INTERSECT TABLE2。你为什么要做所有其他的事情? (例如,您进行了一些投影,然后将它们与原始投影相结合;这总能给出什么?)

参见 this answer