这是数据库,粗体主键。
工作(
person_name
, company_name, salary)
假设我们有这个问题:
找出收入高于 Small Bank Corporation 每位员工的所有员工的姓名。
建议的解决方案:
我们无法轻松计算收入高于 Small Bank Corporation 每位员工的员工集,但我们可以计算收入低于 Small Bank Corporation 部分员工的员工集。我们从所有员工的集合中减去这个集合。请注意小于或等于,我们会删除同名的记录。
temp ← ∏person_name(σp(works⨯ρd(works)))
p在哪里
works.person_name ≠ d.person_name ∧
works.salary ≤ d.salary ∧
d.company_name = "Small Bank Corporation"
那么答案是:
∏person_name(works) − temp
为什么我们不能轻松地计算出收入高于 Small Bank Corporation 每位员工的一组人?为什么我们可以轻松计算出收入较低的人群?我不明白这一点。 works.salary <= d.salary 究竟做了什么?它是否通过所有 d.salary 实体对每个 works.salary 实体进行循环,并查看它是否 <= for ALL d.salary 实体?
最佳答案
查询可以很容易地表达如下:
select person_name
from works
where salary > (
select max(salary)
from works
where company_name = 'Small Bank Corporation')
关于sql - 为什么查询多于每个实体与少于一些实体更难?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34103895/