SQL のEXISTS
and句の違いは何ですか?IN
はいつ使用したらよいでしょうかEXISTS
、また はいつ使用したらよいでしょうかIN
?
ベストアンサー1
キーワードexists
はこのように使用できますが、実際にはカウントを回避するための方法として意図されています。
--this statement needs to check the entire table
select count(*) from [table] where ...
--this statement is true as soon as one match is found
exists ( select * from [table] where ... )
これは、よりもはるかに高速であるif
ため、条件文がある場合に最も役立ちます。exists
count
in
は、渡す静的リストがある場合に最適です。
select * from [table]
where [field] in (1, 2, 3)
ステートメントにテーブルがある場合はin
を使用する方が理にかなっていますjoin
が、ほとんどの場合は問題にはなりません。クエリオプティマイザはどちらの方法でも同じプランを返すはずです。一部の実装(主にMicrosoft SQL Server 2000などの古いもの)では、in
クエリは常に を取得します。ネストされた結合プランではjoin
クエリはネストされたマージまたはハッシュ必要に応じて。最新の実装はよりスマートで、が使用されている場合でもプランを調整できますin
。