涉及自然连接的关系代数到 SQL

问题描述 投票:0回答:2

自然连接不应该有条件。

这个关系代数是如何翻译成 SQL 的?

σ SupplierId=’Datec’ (r(Asset) * r(Supplier))
sql relational-algebra
2个回答
0
投票

连接

(r(Asset)*r(Supplier))
位于括号内。该子表达式产生一个关系。

选择/限制

σSupplierId=’Datec’( ... )
位于括号之外。它不关心括号内应用什么操作,只要它们产生关系即可。

所以 Join 没有“有条件”。这是具有条件的整体查询。

需要帮助将其转换为 SQL

我需要警告的是,关系代数有很多种,其中大多数的语义与 SQL 并不完全对应。特别是具有可为空列的表之间的联接往往会很糟糕。但是

SELECT UNIQUE *
WHERE SupplierId = 'Datec'
FROM Asset NATURAL JOIN Supplier

顺便说一句,大多数 SQL 供应商尚未实现

NATURAL JOIN
和/或在如何使用它方面存在特定于供应商的限制。请参阅供应商的文档。


-1
投票

所谓的

natural join
运算符一点也不“自然”。 它有条件——只是没有明确地显示出来。

条件是两个表中任何同名列之间的相等匹配。 当存在此类列时,“自然”连接相当于

inner join
,或者如果您包含
left
right
full
关键字,则相当于外连接。

如果不存在同名的列,则“自然”连接相当于

cross join
。 当然,
cross join
实际上是一个具有
inner join
条件的
1=1

请注意,自然连接不会考虑正确声明的外键关系,这就是为什么我认为它根本不是“自然”的。

© www.soinside.com 2019 - 2024. All rights reserved.