今回は、基本情報技術者試験のデータベースに関する過去問を取り上げ、詳しく解説していきます。データベースは、システムやアプリケーションの設計で欠かせない要素ですので、しっかりと理解しておきましょう!
問題
「次のSQL文に関して正しい説明はどれか?」
SELECT 商品名, SUM(売上)
FROM 商品表
GROUP BY 商品名
HAVING SUM(売上) > 1000;
- ア 売上が1000を超える商品を集計して表示する
- イ 商品名が1000文字以上の商品の売上を表示する
- ウ すべての商品とその売上合計を表示する
- エ 商品名の異なる行だけを集計する
SQL文の意味を解説!
まず、このSQL文はデータベースから商品名とその売上の合計を取得して、売上が1000を超える商品だけを表示する、というものです。SQLの各部分がどのように機能するか、順を追って見ていきましょう。
1. SELECT
SELECT 商品名, SUM(売上)
- SELECT は、データベースから取得したい列を指定する部分です。この場合は「商品名」と「売上の合計(SUM(売上))」を選択しています。
2. FROM
FROM 商品表
- FROM 句では、どのテーブルからデータを取得するかを指定します。この場合、テーブル名は「商品表」です。
3. GROUP BY
GROUP BY 商品名
- GROUP BY は、指定した列(この場合は「商品名」)ごとにデータをグループ化するための句です。これにより、同じ商品名に関連するすべての行のデータが一つにまとまり、その売上が合計されます。
4. HAVING
HAVING SUM(売上) > 1000
- HAVING は、
GROUP BYでグループ化したデータに対して条件を付ける句です。この場合、「売上の合計が1000を超えるグループだけを表示する」という条件が指定されています。WHERE句に似ていますが、HAVINGは集計結果に対して使われるのがポイントです。
選択肢の解説
ア 売上が1000を超える商品を集計して表示する
- 正解です!
このSQL文は、売上の合計が1000を超える商品を集計し、その商品名と売上の合計を表示します。
イ 商品名が1000文字以上の商品の売上を表示する
- 不正解です。
このSQL文は、商品名の長さではなく、売上の合計に基づいて商品を選択しています。商品名の文字数には関係ありません。
ウ すべての商品とその売上合計を表示する
- 不正解です。
このSQL文は、売上が1000を超える商品だけを表示します。すべての商品を表示するわけではありません。
エ 商品名の異なる行だけを集計する
- 不正解です。
GROUP BY句は商品名でグループ化しますが、異なる行を集計することだけを目的としているわけではありません。この文はあくまで売上の合計が条件です。
SQLの動き方を図解!
- 商品表 からデータが取り出され、すべての行が読み込まれます。
- 商品名ごとにデータがグループ化され、売上の合計が計算されます。
- 売上の合計が1000を超えたグループ(商品)だけがフィルタリングされます。
- 最終的に、条件に合致する商品の商品名と売上合計が表示されます。
実際の例
仮に以下のようなデータが商品表に入っていたとします。
| 商品名 | 売上 |
|---|---|
| りんご | 500 |
| みかん | 800 |
| りんご | 600 |
| みかん | 300 |
| バナナ | 1500 |
このSQL文を実行すると、次のような結果になります。
| 商品名 | 売上合計 |
|---|---|
| りんご | 1100 |
| バナナ | 1500 |
売上が1000を超える「りんご」と「バナナ」だけが表示されましたね。
まとめ
今回の問題で問われていたのは、SQLのカラム選択、グループ化、集計条件に関する知識です。正解は ア:売上が1000を超える商品を集計して表示する でした。SQLは、データベースを効率的に操作するための基本スキルですので、しっかりと理解しておくと非常に役立ちます!
これからも基本情報技術者試験に向けて、過去問を解説しながら学んでいきましょう!

コメント