【问题标题】:Relational Algebra how can I SELECT two conditions?关系代数如何选择两个条件?
【发布时间】:2017-01-29 17:05:29
【问题描述】:

相关表格为:

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

列出从伦敦出发前往肯特的火车的详细信息。

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

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

【问题讨论】:

  • 会不会看起来像 σ(departure-station='LONDON'∧destination-station='KENT'(TRAIN)) 并翻译(取决于查询语言)为 SELECT * FROM TRAIN WHERE departure-station = 'LONDON' AND destination-station = 'KENT' ??
  • 这可能是正确的,但我在英国,不幸的是,我们以不同的方式教授这些东西,这意味着我们不使用 sigma 表示法或类似的东西,只是选择, PROJECT、DIVIDEBY 等。实际上我们甚至不写 SELECT,我们使用 RESTRICT,尽管它是相同的,但只会给美国的其他人造成更多混乱,例如使用 SELECT 和不同表示法的人。因此,如果您不是来自英国,这会使我的问题更加混乱:/
  • 1.请提供您应该使用的“关系代数”版本的参考或摘要。为什么不知道是否可以在 RESTRICT/SELECT 中使用 AND? 2. 还有其他表格告诉你“火车详情”吗?因为这张表似乎给出了火车 trip 的详细信息。 3.看我的回答。

标签: relational-database relational-algebra


【解决方案1】:

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

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

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

您的长格式毫无意义地设置了TABLE3,不使用它,然后再次设置它。此外,您的长格式无效,因为 INTERSECT 需要两个具有相同属性集的关系。但你是对的,INTERSECT 与 AND 平行。 NATURAL JOIN 也是如此。每个表(给定或查询)都有一个谓词,即由属性参数化的语句模板,给出元组成员条件。例如,TRAINtrain-type 类型的 train train-codedeparture-station 的元组目的地站INTERSECT & NATURAL JOIN 返回一个关系 AND 在另一个关系中的元组,即满足一个关系的谓词 AND 与另一个关系的谓词。同样,UNION 计算 OR,MINUS 计算 AND NOT,并且 ...WHEREcondition 计算 ... AND 条件。例如,您的 SELECTANDtrain-type 类型的火车 train-codedeparture-station 的元组>destination-station AND departure-station = 'LONDON' AND destination-station = 'KENT'。 PROJECTrelationOVERattributes kept 计算 FOR SOME(值)删除的属性谓词时间>。例如,TABLE4 是元组,其中 FOR SOME train-typedeparture-station & destination-stationtrain-code train-type 类型的 em> 从 departure-stationdestination-station AND destination-station = '肯特'。

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

this answer

【讨论】:

  • 感谢您提供这个解释清楚的答案!这很有帮助,我不确定我提供的长答案,并认为它可能不正确,但没有意识到它可以像你展示的那样简单地完成。至于关系代数的版本,我真的不确定它是什么版本,因为我们没有被告知;我们只是被告知它是关系代数,并且通常使用 RESTRICT 函数等(如果这可能有助于指示其版本,则不是 SELECT)。也许它是原始版本,您解释 AND 不能使用,在这种情况下,您最后的答案对我特别有用。
  • 不知何故给你分配任务的人在他们说“限制”时定义了他们的意思。演讲?幻灯片?笔记?教科书?参考?他们也举了例子。 (我预测,Avison 和 Fitzgerald。)
【解决方案2】:

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

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

【讨论】:

  • 问题是询问关系代数表达式。他们使用字母名称而不是符号。
【解决方案3】:

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

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

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

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

【讨论】:

  • 啊,谢谢,这就是我所希望的,并认为答案是,但直到现在我还不确定!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多