[0095] SQL(SELECT)

平成12年度秋期 初級システムアドミニストレータ試験より
 表Aから表Bを得るためのSQL文はどれか。

SELECT * FROM 表A WHERE 部署コード <> NULL
SELECT 部署コード, 社員コード, 名前 FROM 表A
SELECT 部署コード, 社員コード, 名前 FROM 表A GROUP BY 部署コード
SELECT 部署コード, 社員コード, 名前 FROM 表A ORDER BY 部署コード

正解

解説

 SELECT文の問題は、抽出された表のイメージから注意深くSELECT文を類推していくことが重要です。この問題では、表Bの以下の点に注意してみましょう。


(1) 表Bの列は、{'部署コード', '社員コード', '名前' }である

 SELECT句で、表Bと同じ列が指定されていなければなりません。したがって、SELECT句は以下のようになっているはずです。
  • SELECT 部署コード, 社員コード, 名前
(2) 表Aと表Bの行数が同じである

 表Aと表Bの行数が同じであるということは、下に挙げる 1 もしくは 2 のいずれかになっていなければなりません。

  • 1. WHERE句が指定されていない
  • 2. WHERE句が指定されているが、表Aの全ての行が該当している
(3) 表Aと表Bで行の並び順が変わっている

 並び順が変わっているので、ORDER BY句が指定されているはずです。表Bは、部門コードの昇順に並び替えられているので、ORDER BY句は以下のようになっているはずです。

    ORDER BY 部署コード
 以上より、エが正解となります。




 ちなみに、選択枝ア、イ、ウのSQLを実行した場合の結果を以下にまとめます。参考にしてみてください。

 SELECT * FROM 表A WHERE 部署コード <> NULL
NULL値と比較する場合、「 IS NULL 」としなければなりません。NULL値は特殊な値で、NULL値とどのような値を比較しても、必ず false、つまり 条件対象外となります。

 SELECT 部署コード, 社員コード, 名前 FROM 表A
並べ替え(ORDER BY)が指定されていません。指定されていない場合、並び順はRDBMSに一任されます。

 SELECT 部署コード, 社員コード, 名前 FROM 表A GROUP BY 部署コード
エラーが発生し、SQLは実行できません(実行できてしまうRDBMSもあります)。部署コードでグループ化されているのに、社員コード、名前がSELECT句で指定されているからです。
※ 解説の内容は執筆時点のものであり,含まれている情報の正確性,妥当性について保証するものではありません。ご注意ください・・・

関連する(かもしれない)問題