このクエリはどういう意味ですか
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
トレーナーテーブルには
----------------
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
)
クエリには、「select」と「where」の 2 つの部分があります。最初に where 部分を見てください。
where not exists
(select fname, lname from Trainer)
この where 句は、Trainer テーブルに何もない場合は「true」と評価され、そこに何かがある場合は「false」と評価されます。次に、「選択」部分を見てください。
select fname, lname from Owners
これにより、「所有者」テーブルからすべての行が選択されます。
これをまとめると、クエリは、Trainer テーブルに何もない場合 (およびその場合にのみ)、Owner テーブルからすべての行を選択し、存在する場合はまったく何も選択しません。