考虑以下架构:
Person(SSN, name, address)
Car(license, year, model)
Accident(license, accident_date, driver, damage_amount)
Owns(SSN, license)
带下划线的主键。请注意,发生车祸的驾驶员不一定总是车主。假定事故日期是整数类型,并且表示年份(例如1980)。 Year也是整数类型。同样,假设汽车在特定日期不能卷入多起事故。
以下哪个查询对找到拥有一辆或多辆汽车的每个人的SSN都是正确的,而这些人均从未发生过车祸。
(一种)
SELECT O.SSN
FROM Owns O
WHERE O.license NOT IN (SELECT A.license
FROM Accident A)
(B)
πSSN(Owns) - πSSN(Owns ⨝ Accident)
(C)
{ O | ∃O1 ∈ Owns( O.SSN = O1.SSN ∧ ¬∃A∈ Accident( O1.license = A.license )) }
(D)以上全部。答案: (B)
说明:仅选项(B)正确。
选项(A)和选项(C)会返回至少有一辆未参与事故的汽车的每个人的SSN,而问题将询问其所有汽车从未参与过事故的人员。
这个问题的测验