基本情報技術者試験 (FE) 科目 A — データベース

SELECT 文の基本 — 射影と重複の除去

定義

SELECT 文は「どの表から (FROM)、どの行を (WHERE)、どの列を (SELECT) 取り出すか」を書く。列を選ぶ操作を関係代数では射影と呼ぶ。DISTINCT を付けると結果から重複行が取り除かれる。

SELECT 文は 3 つの部品でできている

SQL の問合せは、最小構成では次の 2 行です。

SELECT 商品名, 単価   -- どの列を取り出すか
FROM 商品             -- どの表から取り出すか

SELECT に書いた列だけが結果に出ます。この 「必要な列だけを取り出す」操作を、関係代数では射影と呼びます。行を絞り込む選択(WHERE)と対になる概念で、用語として問われることがあります。

試す: SELECT に書く列を減らしたり増やしたりしてみる

リセットで表の中身も元に戻ります
エディタを読み込み中…

* は「その表の全列」に展開される

* は表の全列を順番に並べたのと同じ意味です。 表が複数あるときは 商品.* のように表名で修飾すると、 その表の列だけを展開できます。

試す: * を 商品.* や 在庫.* に書き換えると、どちらの表の列が出るか

リセットで表の中身も元に戻ります
エディタを読み込み中…

AS で別名を付ける(相関名)

AS は列や表に別の名前を付けます。シラバスでは相関名という用語で登場します。

SELECT 単価 AS 価格 FROM 商品        -- 列に別名
SELECT S.商品名 FROM 商品 AS S       -- 表に別名

表の別名は、同じ表を 2 回使う自己結合や、長い表名を何度も書きたくないときに使います。表に別名を付けたら、その後は元の表名では参照できません。FROM 商品 AS S と書いたら 商品.商品名 ではなくS.商品名 と書きます。

試す: 相関名を S から別の名前に変える / 商品.商品名 に戻すとどうなるか

リセットで表の中身も元に戻ります
エディタを読み込み中…

DISTINCT で重複を取り除く

DISTINCT を付けると、結果から重複した行が取り除かれます。 下のエディタで DISTINCT を消してみてください。 5 行に増えます。

試す: DISTINCT を消すと 3 行 → 5 行

リセットで表の中身も元に戻ります
エディタを読み込み中…

SELECT はいつ評価されるのか

一つ進めるを押していくと、FROM で表を読み込んでから SELECT で列が絞られるまでの流れが 1 段階ずつ見られます。SELECT が最後に評価されることがここで確認できます。

試す: 一つ進める を押して、FROM → SELECT の順に見る

リセットで表の中身も元に戻ります
エディタを読み込み中…

試験で問われるポイント

  • 射影と選択の区別。列を選ぶのが射影(SELECT)、 行を選ぶのが選択(WHERE)。用語をそのまま問う問題が出ます
  • DISTINCT を付けたときの行数。 「この SQL の結果は何行か」を問う形で頻出します
  • 相関名を付けた後の参照方法。 別名を付けたのに元の表名で書いている選択肢は誤りです

よくある疑問

Q.SELECT * と列を並べて書くのはどちらがよいですか?
A.試験では表の全列を見たいときに * を使い、必要な列だけを問われている場合は列名を並べます。実務では * を避けるのが基本です。表に列が追加されたときに結果の形が変わってしまい、プログラム側が壊れるためです。
Q.DISTINCT はどの時点で効きますか?
A.SELECT で列が確定した後です。つまり「取り出した列の組み合わせ」が同じ行が重複と見なされます。元の表で違う行でも、取り出した列だけを見ると同じになる場合は 1 行にまとまります。
Q.AS は省略できますか?
A.省略できます。SELECT 単価 価格 のように列名の後ろに名前を続けるだけでも別名になります。ただし読みにくく、列の書き忘れ(カンマ落ち)と見分けが付かなくなるので、試験でも実務でも AS を書くことが推奨されます。

SELECT の基本」の練習問題 1

読んだ内容がそのまま出題されます。解答すると解説と、 その SQL を実行シミュレーターで開くリンクが出ます。

自由に試す / 他のレッスンを読む

データベース分野をもっと学ぶ(おすすめ書籍)

本セクションはAmazonアソシエイトのリンクを含みます。

オンライン個別指導

プログラムの読み方でつまずいたら。

たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。

無料相談を予約する →
受講者の声 (DB・SQL コース)
menta レビュー原文を見る →
  • 教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。
    H 様DB・SQL コース受講
  • 体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。
    M 様DB・SQL コース受講
  • 大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。
    K 様DB・SQL コース受講