给定 SQL 查询的等价元组关系演算

Ani*_*rma 1 relational-theory relational-calculus

好吧,这是一个 SQL 查询:

select Employee.Name,Department.Name
from Employee,Department
where Employee.Dept_no=Department.No
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一个元组关系演算:

{t|? s ? Employee (s[Name]=t[Name] ^ 
? u ? Department(u[Name]=s[Name]^u[No]=s[No]))}
Run Code Online (Sandbox Code Playgroud)

我的方法正确吗?如果没有,那么任何人都可以帮助我理解吗?

Ren*_*nzo 5

元组关系演算表达式应该用一阶逻辑的常用语言编写。

例如,在这种情况下,您可以编写:

{ [e.Name, d.Name] | ? e ? Employee, ? d ? Department . e.Dept_no = d.No }
Run Code Online (Sandbox Code Playgroud)

(所用符号的微小变化的一部分,如“:”而不是“.”)。

这个想法是您通过查找关系的元素来获得查询的结果(一阶逻辑的格式良好的公式),这些元素替换为公式的自由变量,使公式为真。

在这种情况下,我们有两个变量,d并且e,该范围上Departments,并Employees分别,那一定是真实的(条件e.Dept_no = d.No),并从每对满足此条件的关系的元组,您添加到所形成的结果集的元组在NameeNamed(换句话说,你执行一个简单的连接)。

请注意,表达式的结构可以很容易地映射到 SQL 查询(实际上这种语言是 SQL 语言的起源,以及其他添加项)。这可以是关于如何编写与此类似的其他查询的建议。