我正在读期末考试,这是在过去的考试中出现的:
表:护士 - ( nid:int ,nname:string,年龄:真实,工资:真实, sid:int)
表:主管 - ( sid:int ,评级:真实)
表:WorksIn - ( nid:int , hid:int ,hours:real)
表: 医院 - ( hid:int ,hname:string,tid:int)
表:城镇 - ( tid:int ,tname:string,mayor:string)
解释以下查询检索的内容:
SELECT nname FROM Nurse N WHERE NOT EXISTS ( (SELECT H.hid FROM Hospital H WHERE H.town = ‘Toronto’) EXCEPT (SELECT W.hid FROM WorksIn W WHERE N.nid = W.nid))
这个查询有什么作用?我可以理解,子查询返回多伦多所有没有护士工作的医院,但我不知道它与NOT EXIST部分有什么联系。
答案 0 :(得分:6)
分阶段考虑:
The set of nurses where
there does not exist
a hospital in Toronto where the nurse doesn't work.
根据排除中间的法则变成
The set of nurses where
the nurse works in all Toronto hospitals
请注意与评论员讨论时提出的这些观点:
答案 1 :(得分:0)
对于每位护士,子查询需要多伦多的所有医院,并且不包括所有他/她工作的医院。这让我们留下了多伦多医院,他/她不工作。要满足NOT EXIST
此护士的此类列表需要为空。所以这位护士必须在每个多伦多医院中工作。
因此查询返回护士,这些护士在每个多伦多医院工作。
考虑到多伦多的规模和医院的数量,这不是人道的可能,但这仍然是答案。