• ベストアンサー

SQL 副問い合わせ EXSIST?

いつもお世話になってます。独学で情報処理勉強しています。 【専門用語をなるべく使わずに】答えていただける方お願いします。 表が「社員表」と「社員有資格表」の二つしかなくて、 社員表    |社員番号|社員名|所属| 社員有資格表 |社員番号|資格名|登録日| 「資格を複数持つ社員を抽出するSQL」で SELECT DISTINCT 社員番号 FROM 社員有資格表 B1 WHERE EXSISTS (SELECT * FROM 社員有資格表 B2 WHERE B1.社員番号=B2.社員番号 AND B1.資格名<>B2資格名) のB1とかB2はなんですか。

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

No.1の方が言われるようにB1、B2はニックネームです。 しかし、ここでは1つの表にB1、B2の2つのニックネームをつけています。 こうすることによって同じ表同士の比較ができます。 同じ2つの表同士で社員番号が同じで資格名がちがうものが存在するかどうかをテストしています。 それがEXISTS(存在する)です。 因みに該当者は社員番号が複数出てしまいますのでこれを一つにまとめるのがDISTINCTです。 また、この問題では社員表は使う必要はありません。(ひっかけ問題?)

yoshikon
質問者

補足

ありがとうございます。意味が分かりました。 それから一緒に聞けばよかったのですが、もうひとつだけ教えていただきたいのですが、B1.資格名<>B2資格名がなぜ資格名が違うものになるのでしょうか。よろしくお願いします。

その他の回答 (2)

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

No,2です。 > B1.資格名<>B2資格名がなぜ資格名が違うものになるのでしょうか。 A≠B を A<>B と書く約束です。

yoshikon
質問者

お礼

重ね重ねありがとうございます。 基本情報技術者の参考書3冊、午前午後問題集各1冊には載ってなかったので聞いてしまいました。自分で調べられる範囲だったみたいですね。どうもありがとうございました。

回答No.1

表名である「社員表」と「社員有資格表」を何度もSQLの中で記載するのが面倒なので、このSQLの中では 「FROM 社員有資格表 B1」 の部分で社員有資格表をB1とニックネームをつけて、次に社員有資格表と書く代わりにB1と書けばすむもののはずなんですが、どうもおかしいですね。 B1とB2どちらとも社員有資格表になってます。 どちらかが社員表だと思うんですが。

関連するQ&A