2 sql database relational-algebra relational-database relational-division
我的查询包括拥有和计数或全部。这些在 RA/DRC/TRC 中如何表示?我是否必须进一步简化我的 SQL 查询?这是一个简化的示例:
empl(employee (primary key), city)
managers(employee (primary key), manager (foreign key of employee))
Run Code Online (Sandbox Code Playgroud)
如果我要找到 X 市所有员工的经理(来自任何城市)的所有员工..我需要使用having/count。不知道在 RA/DRC/TRC 中这将如何完成。
我知道这样的查询的需要可能没有意义,但假设对于这个问题的目的来说这是合理的。
谢谢
您的查询表述得有点含糊。确实是为了找到所有经理,他们是 X 市每个员工的经理?
正如 dportas 所指出的,这在 RA 中是完全可行的。
就是这样 :
获取 X 市所有员工的集合。称之为 EMPX。
获取所有经理的集合。称之为 MGRS。
求两者的笛卡尔积。称之为 MGRS_EMPX。
从中减去表的实际值(适当地投影到所需的属性),该表表示哪些经理管理哪些员工。这种差异包含了真正存在的经理的所有组合,其中一名员工位于 X,但该经理并不管理该员工。
将这种差异投射到经理属性上。该关系告诉您存在哪些经理,使得 X 城市存在不受该经理管理的员工。
从 MGRS 中减去该关系。显然,这种关系告诉您存在哪些经理,使得 X 城市不存在不受该经理管理的员工。
将存在量词的否定重写为通用量化将揭示这正是您想要的结果:NOT EXISTS(EMP:EMP 在 X 中并且 EMP 由 MGR 管理)=== FORALL EMP:NOT(EMP 在 X 中) AND EMP 由 MGR 管理)=== FORALL EMP :(EMP 不在 X 中或 EMP 由 MGR 管理)=== FORALL EMP :(如果 EMP 在 X 中,则 EMP 由 MGR 管理)。
所有这些都是完美的代数运算。
(附带练习:看看如果 X 城市根本没有员工会发生什么。)
| 归档时间: |
|
| 查看次数: |
3954 次 |
| 最近记录: |