这个查询是什么意思
select fname, lname
from Owner
where not exists
(select fname, lname
from Trainer)
我的理解是:它从表所有者返回 fname 和 lname,而这些名称在表训练器中不存在?我对吗?
这个查询是什么意思
select fname, lname
from Owner
where not exists
(select fname, lname
from Trainer)
我的理解是:它从表所有者返回 fname 和 lname,而这些名称在表训练器中不存在?我对吗?
Owner
找出存在于表中但不存在于表中的人的姓名Trainer
。
从表中获取owner
表中不存在的每个人的列表是一种非常蹩脚的方式trainer
。
所以,如果Owner
表包含
----------------
fname | lname
----------------
clark | kent
lois | lane
peter | parker
Trainer 表包含
----------------
fname | lname
----------------
peter | parker
hal | jordan
你应该得到一个结果集:
----------------
fname | lname
----------------
clark | kent
lois | lane
更新
实际上,如果 Trainer 表中有任何记录,您的查询将不会返回任何内容。您可能应该使用:
select fname, lname
from Owners
where not exists (
select fname, lname
from trainers
where fname=Owners.fname
and lname=Owners.lname
)
查询有两个部分:“选择”和“位置”。先看 where 部分:
where not exists
(select fname, lname from Trainer)
如果 Trainer 表中没有任何内容,则此 where 子句评估为“true”,如果存在某些内容,则评估为“false”。现在看看“选择”部分:
select fname, lname from Owners
这将从“所有者”表中选择所有行。
综上所述:如果(且仅当)Trainer 表中没有任何内容,则查询从 Owner 表中选择所有行——如果有,则绝对没有。