投稿する

INとEXISTSの違い [2017]

 名無しさん(No.1) 
何回か調べたり解説を読んだりしたのですが、どうしてもこれの二択になった時迷ってしまいます  判断する時にいい方法とかってありますでしょうか
2019.10.16 15:13
ジョンさん(No.2) 
この投稿は投稿者により削除されました。(2019.10.16 22:46)
2019.10.16 22:46
トーシロさん(No.3) 
  条件に一致するものがあるかないかだけを調べたいならEXISTSでいいですし、一致するレコードも欲しいわがままさんならIN句で取り出せばいいだけです。
  例えば会員表の中に○○さんが要るかどうかを調査したいだけならEXISTSで十分ですし、さらにその人のレコードを選択して、個人情報なりを調べたい状況であればIN句を使えばいいでしょう。
  問題を見てレコードの内容が必要なければEXISTS、でいいんじゃないかと思います。基本的にはIN句の方が汎用性があって便利なので迷ったらIN句を選ぶのが無難かもしれません。

  求めていた内容と違ってたらすみません。
2019.10.16 22:49
ジョンさん(No.4) 
INとEXISTの違いを細かく説明してほしいとなると少々厄介ですが
****************
SELECT  列名  FROM  表
  WHERE【      】  (SELECT~)
****************
のような副問い合わせの時に
【  】にINとEXIST、どっちを使えばよいか?なら簡単です。

●INの場合
  WHEREと【IN】の間に列名の指定が必要。
  つまりWHERE 列名【IN】(SELECT~)・・・となる。

●EXISTの場合
【EXIST】のみ。
  つまりWHERE  【EXIST】(SELECT~)・・・になる。

見当違いな回答だったらすみません。
2019.10.16 23:06
Rさん(No.5) 
IN演算子は、INを挟んで左側のデータが、INを挟んで右側の【リスト】の中にあるかを真偽で判定します。
対して、EXISTS演算子は、続く副問い合わせに「行が存在するか否か」を真偽で判定します。

IN演算子は様々な比較対象があります。
・単数列、単数行との比較
    列A IN (データ1)      ←  = による比較と同義
・単数列、複数行との比較
    列A IN (データ1, データ2, データ3)   ← 1列3行の選択が行われる副問い合わせ
・複数列、複数行との比較
    (列A , 列B) IN (  (データ1, データ2), (データ3, データ4) )  ←2行2列

EXISTS演算子は、単なる比較ではなく、前述のとおり「副問い合わせの結果が1行以上あるかないか」で判定しています。
変わっているのは、EXISTSを用いる場合には、副問い合わせの中で、主問い合わせで出現する列を利用することができます。

SELECT a, b, c FROM T1
WHERE EXISTS (
    SELECT d FROM T2
    WHERE T1.a = T2.d )

普通なら、副問い合わせでT1の列aにはアクセスできません。
しかし、EXISTSを利用する場合はアクセスすることができます。

2019.10.17 16:08
Rさん(No.6) 
☆よさそうな判断方法

EXISTSの説明でも述べた通り、「副問い合わせから主問い合わせにアクセスできる」というのが非常に大きな特徴です。
この特徴は、主問い合わせにアクセスしていなければ、「EXISTSの意味があまりない」ことがほとんどです。(わざとアクセスしない場合もあるんでしょうが。。。少なくともFEの過去問でそんなことはなかったはず)

つまり、【副問い合わせを確認し、主問い合わせで射影された列を参照していれば】EXISTSを利用する可能性が大きいです。
2019.10.17 16:11
 名無しさん(No.7) 
分かりやすく教えてくださってありがとうございます!おかげで良く分かりました!
2019.10.18 11:29

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
© 2010-2024 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop