gpt4 book ai didi

SQL -> 关系代数

转载 作者:行者123 更新时间:2023-12-03 21:31:25 25 4
gpt4 key购买 nike

假设我有以下关系:

Branch (branchNo(PK), street, city, postcode)

Staff (staffNo(PK), fName, lName, sex, branchNo(FK))

这对这个问题并不重要,但 PK = 主键 & FK = 外键

我将如何为以下查询编写关系代数:

List the names of all female staff that work in Glasgow.

我的尝试:

σ<sub>Staff.sex=F & Branch.city = Glasgow</sub>(π<sub>fName, lName, sex, branchNo</sub>(Staff) x π<sub>city, branchNo</sub>(Branch))

我知道我的selection (σ) 语句(不要与 SELECT 混淆)在语法上是不正确的:

σStaff.sex=F & Branch.city = Glasgow

如何根据不同的关系写两个选择?或者换句话说,如何在关系代数中的 WHERE 子句中表达带有两个或多个条件的 SQL 语句?我使用了“&”,但这不对吗?我是否必须将一个选择嵌入另一个?

不是家庭作业

最佳答案

形式关系代数使用逻辑 conjunctiondisjunction和(通常)相同的符号(分别为 ),尽管作者可以自由选择自己的语法。查询可以写成:

π<sub>fName, lName</sub>(σ<sub>(gender=F ∧ city=Glasgow)</sub>(Staff ⋈ Branch))

请注意,x(而不是 ⨯)是笛卡尔积的符号。对于自然连接,您需要⋈(领结)。

如果您想要笛卡尔积而不是自然连接,您基本上可以通过向选择添加适当的条件来实现自然连接。您还需要处理一个事实,即属性 branchNo 对两个关系都是通用的,您可以使用 rename operator 来做到这一点。 (ρ)。

π<sub>fName, lName</sub>(σ<sub>(gender=F ∧ city=Glasgow ∧ branchNo=bNum)</sub>(Staff ⨯ ρ<sub>bNum/branchNo</sub>(Branch)))

正式来说,您可以这样做是因为:

R ⋈ S = π<sub>α(R),α(S)-α(R)</sub>(σ<sub>α(R)∩α(S)=t<sub>1..k</sub></sub>(R ⨯ ρ<sub> t<sub>1..k</sub>/α(R)∩α(S)</sub>(S))))

其中 α(T) 是关系 T 的属性名称(使 α(R) ∩ α(S) 成为公共(public)属性名称)和 t1..k ⊈ α(R) ∪ α(S)是共同属性的新名称。

关于SQL -> 关系代数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5771490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com