基本情報のSQL問題は、構文を丸暗記しているだけだと急に難しく見えます。SELECT、WHERE、JOIN、GROUP BYの意味は知っているのに、問題文を読んだ瞬間にどこから手を付ければいいか止まってしまう人も多いかなと思います。
この記事では、基本情報のSQL問題の解き方を、問題文の読み方から選択肢の消し方まで順番に整理します。SQLそのものを深く学ぶというより、試験で点につなげるための読み替え手順に寄せて解説します。
データベース全体の正規化やER図までまとめて復習したい場合は、先に基本情報技術者試験のSQL・データベース問題を解説した総合記事を読んでから戻ると理解しやすいです。
- SQL問題は出力列・対象表・条件・集計の順で読む
- SELECTは最初に書くが最後に決めると迷いにくい
- JOINは表の関係性と共通列を見る
- GROUP BYは集計関数と1行の単位で判断する
基本情報のSQLの解き方を整理

まず問題文を分ける
基本情報のSQL問題で最初にやることは、SQLを書き始めることではありません。先に問題文を「何を表示したいか」「どの表を使うか」「どんな条件で絞るか」「集計や並べ替えがあるか」に分けます。ここを飛ばすと、SELECTから勢いで読み始めて、途中でJOINやGROUP BYに引っかかりやすくなります。私なら、本文中の名詞に丸を付け、条件を表す言葉に線を引くつもりで読みます。
たとえば「商品ごとの売上合計を、売上額が大きい順に表示する」という問題なら、商品ごとがグループ化、売上合計が集計、売上額が大きい順が並べ替えです。ここまで分けられると、必要な句はSELECT、FROM、GROUP BY、ORDER BYだと見えてきます。細かい構文を思い出す前に、問題文がどのSQL部品を要求しているかを先に判断するわけですね。
| 問題文の表現 | SQLで見る場所 | 判断のコツ |
|---|---|---|
| 表示する、求める | SELECT | 答えに出す列を決める |
| 〜のうち、〜だけ | WHERE | 行を絞る条件を探す |
| 〜ごと、〜別 | GROUP BY | 集計の単位を決める |
| 大きい順、小さい順 | ORDER BY | 最後に並べ替える |
注意したいのは、SQLの書く順番と考える順番が少し違うことです。書くときはSELECTが先頭ですが、実際にはFROMで表を決め、WHEREで行を絞り、GROUP BYでまとめ、最後にSELECTで出力を見る方が自然です。試験では選択肢から選ぶ形式が多いので、完璧なSQLをゼロから書くより、問題文を部品に分けて選択肢を削る力の方が点に直結します。
慣れてきたら、問題文を読んだ直後にSQL句の名前をメモするだけでも十分です。FROM、WHERE、JOIN、GROUP BYのどれが必要かを先に決めると、選択肢の細かな違いに振り回されにくくなります。
SELECTは出力から決める
SELECTは、表示したい列を指定する部分です。ただ、基本情報の問題では「SELECTに何を書くか」だけを単独で問われるより、WHEREやGROUP BYとの組み合わせで問われることが多いです。最初にSELECT句だけを見てしまうと、集計していない列を選んでよいのか、グループ化した列だけを出すのかで迷いやすいですね。だから、SELECTは問題文のゴールとして押さえつつ、最終確認で決めるくらいの感覚がちょうどいいです。
出力列を見るときは、「その列はそのまま出すのか」「合計や件数に加工して出すのか」を分けます。商品名、社員名、部門名のような列はそのまま出す候補です。一方で、売上合計、平均点、件数、最大値のような言葉が出たら、SUM、AVG、COUNT、MAXなどの集計関数を疑います。ここを混ぜて考えると、SELECT句の選択肢がどれも似て見えてしまいます。
- 「一覧」なら列をそのまま表示する可能性が高い
- 「合計」「平均」「件数」なら集計関数を疑う
- 「〜ごと」とセットならGROUP BYも確認する
- 別名は見た目を変えるだけで条件判断とは分ける
選択肢を見るときは、SELECT句に余計な列が入っていないかも確認します。たとえば「部門ごとの平均点」を求めるのに、部門名と平均点以外の個人名までSELECTしている選択肢は怪しいです。GROUP BYでまとめた後は、1行が「部門ごと」の結果になります。そこへ個人名のように1行に決められない列をそのまま出すと、意味が崩れます。この感覚を持っておくと、文法を細かく覚え切れていなくても消せる選択肢が増えます。
また、別名や表示順に惑わされないことも大切です。ASで列名を変えていても、元の列や集計内容が問題文の求める答えと合っているかを見れば判断できます。
WHEREは条件を拾う
WHEREは、表の中から必要な行だけを残すための条件です。基本情報のSQL問題では、条件が日本語で長く書かれていて、SQLにすると意外と単純なことがあります。「価格が1000円以上」「在庫数が0より大きい」「入社日が2024年4月1日以降」のような表現は、まずWHERE候補として拾います。大事なのは、条件を見つけた瞬間にANDなのかORなのかも一緒に考えることです。
ANDとORは、基本情報でかなり間違えやすいポイントです。「AかつB」はAND、「AまたはB」はORですが、文章が長いと読み違えます。特に「東京または大阪の店舗で、売上が10万円以上」のような文では、地域条件はOR、売上条件とはANDで結びます。選択肢にかっこがある場合は、どの条件同士がまとまっているかを必ず見てください。かっこがずれるだけで結果が大きく変わります。
もう一つのコツは、WHEREは「1行ずつ見て判断できる条件」と覚えることです。価格が1000円以上かどうか、会員区分がAかどうか、日付が範囲内かどうかは、1行を見れば判断できます。反対に、合計や平均は複数行をまとめないと判断できません。ここでWHEREとHAVINGを分けられると、GROUP BY絡みの問題でもかなり安定します。迷ったときは「この条件は1行だけ見て判定できるか」と自分に聞くといいですね。
日付範囲や数値範囲では、境界を含むかどうかも確認します。「以上」「以下」は含む、「超」「未満」は含まない、という日本語の違いがそのまま不等号の違いになります。
JOINは表の関係を見る
JOINは、複数の表をつなぐ部分です。苦手な人は、表名が2つ出た時点で難しく感じるかもしれません。ただ、基本情報のSQLで見るべき場所はかなり決まっています。まず、2つの表に共通する列や対応関係を探します。注文表と顧客表なら顧客ID、売上表と商品表なら商品IDのように、「片方の表にある番号が、もう片方の表の主キーを指している」関係がよく出ます。
JOINの選択肢では、ON句の左右が合っているかを確認します。表名や別名が違っていても、つないでいる列の意味が合っていれば正解に近いです。逆に、名前が似ている列でも、意味が違う列を結んでいる選択肢は危険です。たとえば、顧客IDと担当者IDをつなぐような選択肢は、列名にIDが付いているだけで関係が違う可能性があります。問題文の表定義に戻って、主キーと外部キーっぽい関係を確認しましょう。
| JOINで見る点 | 確認すること | よくあるミス |
|---|---|---|
| 表の役割 | 明細表かマスタ表か | 表名だけで判断する |
| 共通列 | IDやコードの対応 | 似た名前の別列を結ぶ |
| 結合条件 | ON A.id = B.idの意味 | WHERE条件と混同する |
| 外部結合 | 存在しない行も残すか | INNER JOINと同じに考える |
INNER JOINとOUTER JOINの違いは、「一致した行だけでよいか」「一致しない行も残したいか」で考えます。基本情報では、全員の一覧を出したいのに注文がある人だけ残ってしまう、というタイプのひっかけがあります。「売上がない商品も表示する」「受講していない学生も含める」のような表現があれば、外部結合を疑います。JOINは構文を暗記するより、どの行を残す必要があるかを読むのが先ですね。
表が3つ以上ある場合も、考え方は同じです。いきなり全体をつなげようとせず、明細表とマスタ表を一組ずつ対応させると、必要なJOIN条件を落としにくくなります。
GROUP BYは集計で使う
GROUP BYは、複数の行をまとまりにして集計するときに使います。問題文に「〜ごと」「〜別」「部門単位」「商品単位」のような言葉が出たら、ほぼGROUP BYを疑ってよいです。基本情報のSQLでは、GROUP BYが必要かどうかを判断するだけで選択肢が半分くらい消えることもあります。特に、SELECTにSUMやCOUNTがあるのにGROUP BYがない選択肢、またはGROUP BYの列が問題文の単位と合っていない選択肢に注意します。
GROUP BYで一番大事なのは、「結果の1行が何を表すか」です。商品ごとの売上合計なら、結果の1行は商品1つ分です。部門ごとの平均点なら、結果の1行は部門1つ分です。この1行の単位に入らない列をSELECTしていると、SQLとして不自然になります。試験の選択肢で、集計関数ではない列がSELECTに並んでいたら、その列がGROUP BYにも入っているかを確認してください。
ORDER BYとの違いも整理しておきたいですね。GROUP BYは行をまとめる処理、ORDER BYは結果を並べ替える処理です。「売上合計が多い順」と書かれている場合、売上合計を作るためにGROUP BYとSUMが必要で、その結果を多い順に並べるためにORDER BYが必要です。ひとつの日本語表現の中に、集計と並べ替えの両方が入っていることがあります。ここを分けて読めると、SQL全体の流れがかなり見えやすくなります。
GROUP BYの列は、問題文の「何ごとに見るのか」と一致します。商品ごとなのか、部門ごとなのか、年月ごとなのかを読み間違えると、集計関数が合っていても答えがずれます。
基本情報のSQLの解き方を例題で確認

例題で読む順番を見る
ここでは、架空の例題で読み方を確認します。たとえば「商品表と売上表を用いて、商品分類ごとの売上合計を求め、売上合計が大きい順に表示するSQLとして適切なものを選べ」という問題が出たとします。この時点で、商品表と売上表を使うのでJOIN、商品分類ごとなのでGROUP BY、売上合計なのでSUM、大きい順なのでORDER BYが必要だと分かります。まだSQLを書かなくても、必要な部品はかなり見えています。
次に、どの表からどの情報を取るかを分けます。商品分類は商品表にあり、売上金額は売上表にあると考えると、2つの表を商品IDなどで結ぶ必要があります。SELECTには商品分類とSUMした売上金額が入り、GROUP BYには商品分類が入ります。ORDER BYはSUMした売上金額を降順にするので、DESCを使う選択肢が有力です。ここまで読めれば、選択肢の細かい表記が違ってもかなり絞れます。

商品分類と売上合計を表示するので、SELECTの候補を決めます。
商品表と売上表を商品IDで結べるかを確認します。
商品分類ごとなので、GROUP BYには商品分類を入れます。
この読み方は、科目Aの知識問題でも科目B寄りの読解でも使えます。もちろん実際の試験では表名や列名がもう少し細かく出ますが、やることは同じです。まず日本語をSQLの部品に分解し、次に表の関係を見て、最後に集計と並べ替えを確認します。SQLの細かい文法で迷ったときも、この順番に戻ると「何を問われている問題なのか」を見失いにくくなります。
例題を解くときは、正解SQLを眺めるだけで終わらせない方がいいです。なぜそのJOINが必要なのか、なぜその列でGROUP BYするのかを一文で説明できる状態まで戻すと、別形式の問題にも応用できます。
選択肢の違いを消す
基本情報のSQL問題は、多くの場合、選択肢のSQLがかなり似ています。全部を最初から最後まで正確に読もうとすると時間がかかるので、まず差分だけを見ます。SELECT句だけ違うのか、WHERE条件だけ違うのか、JOINのON句だけ違うのか、GROUP BYの列だけ違うのかを確認します。差分が分かれば、問題文に戻ってその一点だけを判定できます。これは時間短縮にかなり効きます。
たとえば、4つの選択肢のうち2つはGROUP BYがあり、2つはGROUP BYがないなら、問題文に「〜ごと」「合計」「件数」があるかを見ます。集計が必要ならGROUP BYなしの選択肢を消せます。次に、残った選択肢のJOIN条件が違うなら、表定義を見て正しいIDの組み合わせを選びます。こうやって一つずつ消していくと、SQL全体を完璧に読めなくても正解に近づけます。
- 選択肢の差分を先に見る
- 問題文の表現と差分を対応させる
- 不要な列や条件が入った選択肢を消す
- 最後にSQL全体の流れを確認する
選択肢を消すときは、SQLの実行順も役立ちます。FROMで表を決め、JOINで結び、WHEREで行を絞り、GROUP BYでまとめ、HAVINGでグループを絞り、SELECTで出力し、ORDER BYで並べ替える。この順番で見れば、「この条件は集計前か後か」「この列はグループ化後に出せるか」が判断しやすくなります。問題演習では、正解を探すより先に、明らかに違う選択肢を消す練習をすると伸びやすいです。
この方法は、時間が足りないときほど役立ちます。全選択肢を完読する前に、明らかに条件が足りないものや、集計単位が違うものを消せるだけで、残り時間の使い方がかなり変わります。
NULLと重複に注意する
SQL問題で地味に点を落としやすいのが、NULLと重複です。NULLは「0」や空文字ではなく、値が不明または存在しない状態として扱われます。そのため、通常の等号で比較するのではなく、IS NULLやIS NOT NULLを使う場面があります。基本情報では、NULLを含む外部結合や、未登録のデータを含める問題で出やすいですね。条件式だけを見ていると見落としやすいので、表のデータ例も確認します。
重複は、DISTINCTやGROUP BYと関係します。「重複を除いて」「異なる商品数」「登録されている部門の種類」のような表現がある場合、同じ値が複数行に出る可能性を考えます。COUNTだけなのか、COUNT(DISTINCT 列名)なのかで答えが変わることがあります。問題文に「種類」「異なる」「重複を除く」といった言葉があるなら、選択肢のDISTINCTを必ず確認してください。
| 注意点 | 見る表現 | 選択肢で確認する語 |
|---|---|---|
| NULL | 未登録、存在しない、値がない | IS NULL、外部結合 |
| 重複 | 異なる、種類、重複を除く | DISTINCT |
| 集計後条件 | 合計が、平均が、件数が | HAVING |
| 並べ替え | 大きい順、新しい順 | DESC |
NULLや重複は、普段のプログラミング経験がない人ほどイメージしづらいかもしれません。ただ、試験対策としては「特別扱いされるキーワード」として覚えておけば十分です。問題文にそれらしい表現が出たら、選択肢にIS NULL、DISTINCT、HAVING、外部結合がないかを探します。逆に、それらの語が選択肢にあっても問題文に根拠がなければ、ひっかけの可能性があります。
NULLや重複は、問題文の短い一語に隠れていることがあります。「登録されていない」「一度も購入していない」「種類数」のような表現を見つけたら、普通の条件式だけで済ませない意識を持つと安全です。
演習量の増やし方
SQLの解き方は、読むだけではなかなか定着しません。最初は構文を覚えるより、同じ手順で問題を解く回数を増やす方が効果的です。1問ごとに、出力列、使う表、絞り込み条件、結合条件、集計単位、並べ替えをメモしてから選択肢を見る。これを繰り返すと、問題文からSQL部品を拾う速度が上がります。最初から時間を測るより、まずは手順を崩さずに解く方がいいですね。
復習では、間違えた理由をSQL用語で分類します。「JOIN条件を見落とした」「WHEREとHAVINGを混同した」「GROUP BYの列を誤った」「DESCとASCを逆にした」のように書くと、次に何を直せばいいかが明確になります。単に正解番号だけを覚える復習では、似た問題でまた迷います。苦手パターンを言葉にして残すと、短期間でも点が安定しやすくなります。
出題範囲やサンプル問題は更新される可能性があるため、試験情報そのものはIPAの基本情報技術者試験ページも確認してください。この記事ではSQLの読み方を中心に整理していますが、最終的には公式情報と実際の問題演習で仕上げるのが確実です。過去問を何年分回すか迷う場合は、基本情報の過去問は何年分解くべきかを整理した記事も参考になります。
復習ノートを作る場合も、長い解説を書き写す必要はありません。間違えたSQL句と原因だけを短く残し、次に同じ原因で間違えないようにする方が続けやすいです。
基本情報のSQLの解き方まとめ
基本情報のSQLの解き方は、構文を前から順番に暗記するより、問題文をSQLの部品に分ける方が安定します。最初に出力列を確認し、次に使う表とJOIN条件を見て、WHEREで行を絞り、GROUP BYとHAVINGで集計を判断し、最後にORDER BYで並べ替えを確認します。この流れを何度も使うと、似た選択肢が並んでも焦りにくくなります。
特に大切なのは、「〜ごと」はGROUP BY、「合計や平均」は集計関数、「集計後の条件」はHAVING、「一致しない行も残す」は外部結合、という対応を持っておくことです。全部を一度に完璧に覚えようとすると大変ですが、よく出る言い換えだけでも得点に結びつきます。SQLは暗記科目に見えて、実は読解の手順を固定するとかなり解きやすくなる分野です。
- SELECTは出力したい列と集計結果になっているか
- JOINは表同士の共通IDで結ばれているか
- WHEREとHAVINGを混同していないか
- GROUP BYの単位が問題文の「〜ごと」と一致しているか
次に演習するときは、正解番号を見る前に、問題文の横に「出力」「表」「条件」「結合」「集計」「並べ替え」と書き出してみてください。少し手間は増えますが、数問続けるだけで自分がどこで迷っているかが見えてきます。基本情報のSQLは範囲が広そうに見えても、試験で問われる読み方はかなりパターン化できます。苦手意識がある人ほど、まずはこの手順で1問ずつ確認するのがおすすめです。
最後にもう一度、SQL問題は「知識問題」ではなく「条件整理の問題」と見た方が楽です。構文の名前を覚えたら、次は日本語からどの句を使うかを選ぶ練習に移りましょう。


コメント