戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

ITパスポート 2017年 春期 90


問題文

関係データベースで管理している“商品”表に対して次の三つの操作a〜cを行ったとき、得られる値が大きい順に操作を左から並べたものはどれか。ここで、“%”は0文字以上の任意の文字列を表すものとする。
〔操作〕 a 大盛が‘有’でかつ商品名が‘%うどん%’で選択される商品の数を求める。 b 価格が400以上かつ550以下で選択される商品の数を求める。 c 商品名が‘うどん%’で選択される商品の数を求める。
ITパスポート 2017年 春期  問90の問題画像

選択肢

a, b, c(正解)
b, c, a
c, a, b
c, b, a

🔒 解説は解答すると表示されます

関係データベースの検索条件による件数比較【ITパスポート 解説】

正解の理由

この問題は、小さな表に対して3つの「選択(フィルタ)」を適用し、それぞれ何件ヒットするかを数えるものです。
操作 a は「大盛が‘有’かつ商品名に‘うどん’を含む」行を数えます。表を見ると「大盛=有」は4件(S001, S002, S004, S006)で、これらはいずれも商品名に「うどん」を含んでいます。したがって a は 4 件です。
操作 b は「価格が 400 以上かつ 550 以下」なので該当は S003(500), S004(550), S006(400) の3件です。
操作 c は「商品名が 'うどん%'('うどん'で始まる)」なので S004(うどん定食) と S005(うどんすき) の2件です。よって件数は a=4、b=3、c=2 で、大きい順は a → b → c となり、選択肢の中では が一致します。

解法ステップ

  1. 問題文の操作(a〜c)を「データの絞り込み条件」として理解する。
    • '%' はワイルドカード(0文字以上の任意の文字列)を表す。
    • 'うどん%' は「うどんで始まる」、'%うどん%' は「うどんを含む」。
  2. 表の各行に対して、条件に合うかをチェックする。
  3. 条件に合う行の数をそれぞれ数える。
  4. 得られた件数を大きい順に並べて、選択肢と照合する。
具体的なカウント結果(表に基づく)
  • a(大盛='有' かつ 商品名 LIKE '%うどん%')→ S001, S002, S004, S006 → 4件
  • b(価格 >= 400 かつ <= 550)→ S003(500), S004(550), S006(400) → 3件
  • c(商品名 LIKE 'うどん%')→ S004, S005 → 2件
参考として各操作を SQL(Structured Query Language:構造化問合せ言語)で書くと:
-- a
SELECT COUNT(*) FROM 商品 WHERE 大盛 = '有' AND 商品名 LIKE '%うどん%';

-- b
SELECT COUNT(*) FROM 商品 WHERE 価格 BETWEEN 400 AND 550;

-- c
SELECT COUNT(*) FROM 商品 WHERE 商品名 LIKE 'うどん%';

選択肢別の誤答解説

  • ア(a, b, c)
    正解です。計算すると a=4、b=3、c=2 で降順は a→b→c になります。
  • イ(b, c, a)
    これだと b が最も多いとしていますが、実際は b=3 に対して a=4 で a の方が多いので誤りです。
  • ウ(c, a, b)
    これだと c が最も多い扱いですが、実データでは c=2 が最小です。順序が完全に逆です。
  • エ(c, b, a)
    これも c を最大と見なしていますが、実際は c が最小の2件で誤りです。

よくある誤解

  1. '%' の意味を取り違える
    • '%うどん%' は「前後に何があっても 'うどん' を含む」を意味します。
    • 'うどん%' は「先頭が 'うどん'」。両者は異なります。問題文では a が '%うどん%'、c が 'うどん%' なので注意してください。
  2. 価格の境界値の扱い(400以上かつ550以下)を「含む/含まない」で迷う
    • 「以上(>=)」と「以下(<=)」は境界値を含みます。ここでは 400 と 550 の両方が該当します(S006 と S004)。
  3. 日本語の文字列比較で「大文字小文字」を気にする誤り
    • 日本語(ひらがな・漢字)は大文字小文字の概念はありませんが、英語等で LIKE の挙動は DB の設定(照合順序:collation)によって異なります。今回の問題は日本語なので気にしなくて良いです。

補足コラム

  • LIKE とワイルドカードの使い分け
    • SQL の LIKE 演算子は文字列検索でよく使います。ワイルドカードは主に %(任意の文字列、長さ0可)と _(任意の1文字)があります。覚え方は「% は大きな何でも入る箱」「_ は1文字だけ」だと思ってください。
  • BETWEEN の使い方
    • BETWEEN A AND B は A と B の間(通常は両端を含む)を意味します。例:価格 BETWEEN 400 AND 550 は 400 以上 550 以下。

FAQ

Q1: '%' は空文字にもマッチしますか?
A1: はい。'%うどん%' の左側や右側が空文字でも「うどん」を含むのでマッチします。例えば「うどん」だけの文字列も '%うどん%' に合います。
Q2: SQL の LIKE は大文字小文字を区別しますか?
A2: データベースの設定次第です。MySQL ではデフォルトの照合順序によって区別しないことが多いですが、PostgreSQL では ILIKE(大文字小文字無視)を使うことがあります。本問の日本語例では気にしなくて良いです。
Q3: BETWEEN は端を含むのを忘れがちです。覚え方は?
A3: 「BETWEEN A AND B は A と B の間(含む)」と覚えてください。英語の意味「~の間(含む)」と対応します。

関連キーワード: リレーショナルデータベース、SQL、LIKE演算子、ワイルドカード、BETWEEN
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポート
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について