考虑以下模式:
Person(SSN, name, address)
Car(license, year, model)
Accident(license, accident_date, driver, damage_amount)
Owns(SSN, license)
主键带有下划线。请注意,参与车祸的司机可能并不总是汽车的所有者。假设accident_date 是整数类型,表示年份(例如1980)。年份也是整数类型。此外,假设一辆汽车在某个日期不会卷入不止一次事故。
以下哪个查询是正确的,可以找到拥有一辆或多辆汽车的每个人的 SSN,这些人都没有发生过车祸。
(一种)
SELECT O.SSN
FROM Owns O
WHERE O.license NOT IN (SELECT A.license
FROM Accident A)
(乙)
πSSN(Owns) - πSSN(Owns ⨝ Accident)
(C)
{ O | ∃O1 ∈ Owns( O.SSN = O1.SSN ∧ ¬∃A∈ Accident( O1.license = A.license )) }
(D)以上所有。答案:(乙)
说明:只有选项(B)是正确的。
选项 (A) 和选项 (C) 返回至少拥有一辆未发生事故的汽车的每个人的 SSN,而问题则询问他们的所有汽车从未发生过事故的人。
这个问题的测验