INとEXISTSの違い

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
名無しさん  
(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日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop