rub*_*ube 3 sql database relational relational-algebra relational-division
下面是一个表和简单的 SQL,用于查找恰好出现在两个州的城市
Name State
---- -----
Paris MO
Paris TX
Paris VA
Austin MA
Austin TX
Burling VT
Run Code Online (Sandbox Code Playgroud)
结果:只有奥斯汀才有资格,因为它恰好发生在两个州
SQL
SELECT c1.Name FROM City AS c1
JOIN City AS c2 ON c1.Name = c2.Name AND c1.State <> c2.State
WHERE NOT EXISTS (
SELECT 1 FROM City AS c3
WHERE c1.Name = c3.Name AND c3.State NOT IN (c1.State, c2.State);
Run Code Online (Sandbox Code Playgroud)
我想用关系代数来表达上面的sql。我做了第一部分,它找到了至少在两个州中出现的城市,但无法弄清楚如何表达 NOT EXISTS (...) 部分。我的理解是,我需要在后面的部分中进行一些关系划分。
关系代数(第一部分)
P = 用于重命名的 rho 符号,J = 加入
X1 --> Pc1(City)
X2 --> Pc2(City)
X3 --> X1 J ( c1.Name = c2.Name AND c1.State <> c2.State ) X2
.....
Run Code Online (Sandbox Code Playgroud)
期待一些帮助
小智 5
我给你一个提示:
没有聚合函数,您可以找到:
所以:
某个状态的两次可以计算为:
2次及2次以上的状态除外, 3次及3次以上的状态除外。
所以你需要制作2份表格并计算2个以上州的城镇,然后制作3份并计算3个或更多州的城镇......
当您进行 3 个或更多测试时,请注意此运算符 <> 的非传递性!
我希望你能完成这个练习!这真的很重要!祝你好运
| 归档时间: |
|
| 查看次数: |
5472 次 |
| 最近记录: |