基本情報のSQL問題の解き方|SELECT・WHERE・ORDER BYを例題で解説

公開日: 2026-11-04

この記事を共有

SQLの問題が出ると、英単語が並んでいるだけに見えて、どの行が出てくるのか想像できない。

選択肢の表を見比べて、なんとなくで答えを選んでいませんか?

先に答えをお伝えします。

SQLの問題は、書かれている順番ではなく、FROM → WHERE → SELECT → ORDER BY の順番で読むと、結果の表を予測できます。まず使う表を決め、条件に合う行だけを残し、必要な列を選び、最後に並べ替えるという流れです。

この記事では、SQLを初めて読む人に向けて、SELECT・WHERE・ORDER BYの3つを中心に説明します。この記事のために作った小さな表を使い、SQL文から出力結果を予測する練習をしていきます。

基本情報技術者試験の全体像を先に確かめたい人は、こちらの親記事が参考になります。

【関連記事】基本情報技術者試験とは?試験内容・難易度・勉強法を初心者向けに解説

SQLとは?表からデータを取り出すための言葉

SQLとは、データベースに対して、データを取り出したり書き換えたりするよう命令するための言語です。データベースとは、たくさんのデータを決まった形で整理して保存しておく仕組みのことです。

基本情報で扱うのは、データを表の形で管理する関係データベースです。表は行と列でできていて、1行が1件のデータ、1列が1つの項目を表します。

この記事で使う表

ここからは、次の社員表を使って説明します。会社の社員5人分のデータが入っているものとします。

社員番号 氏名 部署 年齢 給与
101 青木 営業 28 280
102 井上 開発 35 420
103 上田 営業 42 450
104 江藤 総務 35 300
105 小川 開発 24 260

給与の単位は万円とします。この表の名前は、SQLの中では社員と書くことにします。

SQLは4つの部品で読む

今回扱うSQL文は、4つの部品でできています。それぞれの役割を表にまとめます。

部品 役割 読む順番
FROM どの表からデータを取り出すか 1番目
WHERE どの行を残すか(条件) 2番目
SELECT どの列を結果に出すか 3番目
ORDER BY 結果をどの順番に並べるか 4番目

SQL文はSELECTから書き始めますが、頭の中で処理する順番はFROMが先です。表を決めないと、行も列も選べないからです。

この読む順番を覚えておくだけで、結果の予測がぐっと楽になります。

SELECTとWHEREの基本|列を選び、行を絞る

まずは、いちばん基本の形から見ていきます。SELECTは列を選ぶ命令、WHEREは行を絞る命令です。

SELECTで列を選ぶ

SELECTの後ろには、結果に出したい列の名前を、カンマで区切って並べます。

SELECT 氏名, 部署 FROM 社員

このSQLは、社員表のすべての行から、氏名と部署の2列だけを取り出します。WHEREが無いので、5人全員が結果に出てきます。

列の名前の代わりに * と書くと、すべての列を取り出すという意味になります。SELECT * FROM 社員 なら、社員表がそのまま結果になります。

WHEREで行を絞る

WHEREの後ろには、残したい行の条件を書きます。条件に合う行だけが残り、合わない行は結果から外れます。

SELECT 氏名, 給与 FROM 社員 WHERE 給与 >= 300

読む順番に沿って考えてみましょう。まず社員表を用意し、給与が300以上の行だけを残します。

残るのは、井上(420)、上田(450)、江藤(300)の3行です。江藤の給与は300ちょうどですが、>= は以上という意味なので残ります。

最後に氏名と給与の2列を選ぶので、結果は次の表になります。

氏名 給与
井上 420
上田 450
江藤 300

比較演算子の一覧

WHEREの条件で使う記号を、比較演算子と呼びます。基本情報でよく見るものを表にまとめます。

記号 意味 例
= 等しい 部署 = '営業'
<> 等しくない 部署 <> '営業'
> より大きい 年齢 > 30
>= 以上 年齢 >= 30
< より小さい 年齢 < 30
<= 以下 年齢 <= 30

等しくないは、プログラミング言語でよく見る != ではなく、<> と書くのがSQLの基本の形です。また、文字のデータは '営業' のように、シングルクォーテーションで囲みます。

複数の条件を組み合わせる|AND・OR・BETWEEN・IN・LIKE

試験では、条件が1つだけのSQLはあまり多くありません。複数の条件を組み合わせたときに、どの行が残るかを正しく判断できるようにしておきましょう。

ANDとORの違い

ANDは、両方の条件を満たす行だけを残します。ORは、どちらか一方でも満たせば残します。

SELECT 氏名 FROM 社員 WHERE 部署 = '開発' AND 年齢 >= 30

開発部の社員は井上と小川の2人です。そのうち30歳以上なのは井上だけなので、結果は井上の1行になります。

同じ条件をORにすると、結果は大きく変わります。開発部の井上・小川に、30歳以上の井上・上田・江藤を合わせ、重なりを除くと4人になります。

ANDはORより先に計算される

ANDとORが1つの条件に混ざっているときは、ANDが先に計算されます。かけ算が足し算より先に計算されるのと同じ考え方です。

SELECT 氏名 FROM 社員
 WHERE 部署 = '営業' OR 部署 = '総務' AND 給与 >= 400

このSQLは、部署 = '営業' OR(部署 = '総務' AND 給与 >= 400)と同じ意味になります。営業部の青木と上田はそのまま残ります。

一方、総務部で給与が400以上の社員はいません。結果は青木と上田の2行です。

もし、営業部か総務部のうち給与が400以上の人を出したいなら、括弧を付けて書きます。(部署 = '営業' OR 部署 = '総務')AND 給与 >= 400 なら、結果は上田だけになります。

この優先順位は、擬似言語の論理演算と同じ考え方です。and・or・notの読み方を確かめたい人は、こちらの記事も参考になります。

【関連記事】擬似言語の論理演算(and・or・not)の読み方|複合条件で迷わないコツを解説

BETWEEN・IN・LIKEの使い方

ANDやORを何度も書かなくて済むよう、よく使う条件には専用の書き方があります。3つの違いを表で比べます。

書き方 意味 この表での結果
年齢 BETWEEN 28 AND 35 28以上35以下 青木・井上・江藤
部署 IN ('営業', '総務') 営業か総務のどちらか 青木・上田・江藤
氏名 LIKE '上%' 上で始まる 上田

BETWEENは、両端の値を含むのがポイントです。28歳の青木も35歳の井上も、結果に残ります。

LIKEは、文字の一部が合っているかを調べる書き方です。

% は0文字以上の任意の文字列、_ はちょうど1文字の任意の文字を表します。'%田' なら田で終わる氏名、'_川' なら2文字目が川の2文字の氏名という意味になります。

ORDER BYで並べ替える

ORDER BYは、結果の行を並べる順番を決める命令です。SQL文の最後に書き、処理も最後に行われます。

昇順と降順

ORDER BYの後ろに列の名前を書き、ASCなら小さい順(昇順)、DESCなら大きい順(降順)に並べます。ASCもDESCも書かなければ、昇順として扱われます。

SELECT 氏名, 年齢 FROM 社員 WHERE 部署 <> '総務' ORDER BY 年齢 DESC

総務部以外の4人が残り、年齢の大きい順に並びます。結果は上田(42)、井上(35)、青木(28)、小川(24)の順です。

ORDER BYを書かないSQLでは、結果の行の順番は決まっていません。選択肢に同じ行が違う順番で並んでいるときは、ORDER BYがあるかどうかを先に確かめましょう。

複数の列で並べ替える

ORDER BYには、列を複数書くこともできます。最初の列で並べ、同じ値が並んだときだけ、次の列で並べます。

SELECT 氏名, 年齢, 給与 FROM 社員 ORDER BY 年齢 DESC, 給与

まず年齢の大きい順に並べ、同じ年齢の社員がいたときだけ、給与の小さい順に並べるという意味です。社員表では、井上と江藤がどちらも35歳なので、この2人の順番を給与で決めます。

氏名 年齢 給与
上田 42 450
江藤 35 300
井上 35 420
青木 28 280
小川 24 260

DESCは、直前の年齢にだけかかります。給与には何も付いていないので昇順のままです。

DESCが全体にかかると思い込むと、順番を取り違えてしまいます。

出力結果を予測する練習問題

ここまでの内容を使って、結果を予測する練習をしてみましょう。答えを見る前に、FROM → WHERE → SELECT → ORDER BY の順で、紙に書きながら考えてみてください。

練習1

SELECT 氏名 FROM 社員
 WHERE 給与 BETWEEN 280 AND 420 AND 部署 <> '開発'
 ORDER BY 給与

給与が280以上420以下なのは、青木・井上・江藤の3人です。そのうち開発部の井上を除くと、青木と江藤が残ります。

給与の小さい順に並べるので、結果は青木(280)、江藤(300)の順になります。

練習2

SELECT 社員番号 FROM 社員
 WHERE 年齢 < 30 OR 部署 = '営業' AND 給与 > 400
 ORDER BY 社員番号 DESC

ANDが先なので、年齢 < 30 OR(部署 = '営業' AND 給与 > 400)と読みます。30歳未満は青木と小川、営業部で給与が400より大きいのは上田です。

3人の社員番号は101、105、103です。大きい順に並べると、105、103、101になります。

結果を予測できたら、選択肢の表と1行ずつ見比べます。行の数、列の数、並び順の3つを順に確かめると、見落としを防げます。

結果を予測するときに間違えやすい点

最後に、出力結果を予測するときにつまずきやすい点を表にまとめます。練習問題を解いて答えが合わなかったときは、この表のどれに当てはまるかを確かめてみてください。

間違えやすい点 起きること 確かめ方
SELECTから順に読む 条件で使う列と結果に出す列を混同する FROM → WHERE → SELECT の順に読み直す
>= と > を取り違える 境目の値の行が増えたり減ったりする 条件と同じ値の行を、1つずつ確かめる
ANDとORの優先順位を忘れる 残る行がまったく変わる ANDの部分に括弧を付けて書き直す
BETWEENの両端を外す 両端の値の行が抜ける BETWEENは以上・以下と読み替える
DESCが全体にかかると思う 2つ目以降の列の順番を間違える DESCは直前の列だけ、と確かめる

どの間違いも、条件と同じ値や、同じ値が並ぶ行のような、境目のデータで起きやすいものです。自分で小さな表を作るときは、境目に当たる行をわざと入れておくと、よい練習になります。

SQLの問題は科目Aで出題される分野です。科目A全体をどう進めるかは、こちらの記事が参考になります。

【関連記事】基本情報 科目Aの勉強法|暗記に頼らず得点を伸ばす進め方

条件に合う行を1つずつ確かめる作業は、科目Bでプログラムを追うときの考え方とよく似ています。科目Bの出題内容を知りたい人は、こちらの記事を読んでみてください。

【関連記事】基本情報技術者試験の科目Bとは?擬似言語・アルゴリズム対策を初心者向けに解説

私たちの Giji Academy では、擬似言語の講座を記法の基礎から条件分岐・繰返し・配列、科目B対策まで段階的に用意しています。

擬似言語シミュレーターを使えば、プログラムをブラウザ上で1行ずつ実行し、変数の値が変わる様子を確かめられます。講座は擬似言語の講座一覧から始められます。

まとめ

SQLの問題は、FROM → WHERE → SELECT → ORDER BY の順番で読むと、結果の表を予測できます。表を決め、条件で行を絞り、列を選び、最後に並べ替える流れです。

複数の条件があるときは、ANDがORより先に計算されることに注意しましょう。BETWEENは両端を含み、LIKEの % は0文字以上、_ は1文字を表します。

ORDER BYは書いた列ごとに昇順・降順が決まり、何も付けなければ昇順です。小さな表を自分で作り、結果を予測する練習を重ねれば、SQLの問題は得点源にできます。

擬似言語の基礎から応用まで学べる
Giji Academy

Giji Academyでは、擬似言語の基礎からアーキテクチャなどの応用的な内容まで幅広く学べます。
また、ブラウザ上で直接擬似言語コードを試すことができ、実践的なスキルを身につけることが可能です。

Giji Academy の学習画面。左に教材、右にシミュレーター 擬似言語の学習を始める

擬似言語の学習をここから始めよう。