情報処理試験を勉強していると、「SELECT文ってどういう順番で書けばいいの?」「WHEREとHAVINGの違いがわからない…」とつまずきがちです。SELECT文はSQLの中で最も使用頻度が高く、試験でも繰り返し問われる最重要テーマです。

対象試験と出題頻度

SELECT文は、ITパスポート・基本情報技術者・応用情報技術者のすべてで出題されるテーマです。

関係データベースの操作問題の中心であり、FE・APでは「SQL文の実行結果を選べ」「空欄に入る句を選べ」といった形式で毎回のように出題されます。

詳細をクリックして確認
対象試験:
ITパスポート
基本情報技術者
応用情報技術者
出題頻度:
★★★★★
ランクS(超重要)絶対に覚える必要あり

用語の定義

SELECT文とは、一言で言うと

 「関係データベースの表(テーブル)から、条件に合うデータを検索・抽出するためのSQL命令

のことです。

イメージとしては、図書館の蔵書検索機です。

「著者が○○で、出版年が2020年以降の本を、タイトル順に並べて見せて」と条件を打ち込むと、該当する本だけが一覧で表示されます。

SELECT文も同じで、「どの表から」「どの列を」「どんな条件で」取り出すかを指定し、必要なデータだけを返します。

📊 SELECT文の基本情報

項目 内容
分類 DML(データ操作言語)
役割 表からデータを検索・抽出する
基本構文 SELECT 列名 FROM 表名 WHERE 条件
関連SQL命令 INSERT(挿入)、UPDATE(更新)、DELETE(削除)

解説

SQLはDDL(データ定義言語)、DML(データ操作言語)、DCL(データ制御言語)の3つに分類されます。SELECT文はDMLに属し、データを「読み取る」操作を担当します。

INSERT・UPDATE・DELETEがデータを「書き換える」操作であるのに対し、SELECT文は表の中身を変更しません。

SELECT文の構文と句の記述順序

SELECT文は複数の句(キーワード)を組み合わせて書きます。

記述する順序はSQLの文法で決まっており、順序を間違えると構文エラーになります。

📝 SELECT文の記述順序(構文テンプレート)

SELECT  列名1, 列名2, ...
FROM    表名
WHERE   抽出条件
GROUP BY グループ化する列
HAVING  グループに対する条件
ORDER BY ソートする列 [ASC | DESC]

各句の役割

各句がどの処理を担当するかを一覧で整理します。ここだけは確実に押さえてください。

役割 省略
SELECT 取得する列を指定する。* で全列を指定できる 不可
FROM データを取り出すテーブルを指定する 不可
WHERE 単位の抽出条件を指定する
GROUP BY 指定した列の値が同じ行をグループにまとめる
HAVING GROUP BYでまとめたグループに対して条件を指定する
ORDER BY 結果を昇順(ASC)または降順(DESC)に並べ替える

WHEREは「グループ化する前の行」に対する条件、HAVINGは「グループ化した後の集計結果」に対する条件です。この違いは頻出なので、混同しないよう注意してください。

図解:SELECT文の処理フロー

SELECT文を構成する句は、記述順序と実行順序が異なります。

DBMSの内部では以下の順番で処理されます。

SELECT文の実行順序

① FROM(対象の表を決定)
② WHERE(行の絞り込み)
③ GROUP BY(グループ化)
④ HAVING(グループの絞り込み)
⑤ SELECT(列の選択・集計関数の計算)
⑥ ORDER BY(並べ替え)

※ SELECT句は「最初に書く」が「5番目に実行される」点に注意

具体例:社員テーブルからの抽出

以下の「社員」テーブルを使って、実際のSQL文とその結果を確認します。

社員テーブル

社員番号 氏名 部署 給与
001 田中 営業 300
002 鈴木 開発 400
003 佐藤 営業 350
004 高橋 開発 450

例1:部署が「営業」の社員の氏名を取得

SELECT 氏名
FROM   社員
WHERE  部署 = '営業'

→ 結果:田中、佐藤

例2:部署ごとの平均給与が350以上の部署を取得

SELECT   部署, AVG(給与) AS 平均給与
FROM     社員
GROUP BY 部署
HAVING   AVG(給与) >= 350

→ 結果:開発(平均425)。営業は平均325のため除外される

集計関数とDISTINCT

SELECT句ではデータの集計に使う関数を指定できます。試験で問われる主な集計関数は5つです。

関数 意味
COUNT 行数を数える
SUM 合計値を求める
AVG 平均値を求める
MAX 最大値を求める
MIN 最小値を求める

また、DISTINCTをSELECT句に付けると、結果から重複行を除去できます。

「SELECT DISTINCT 列名 FROM 表名」のように記述します。

複数テーブルの結合

FROM句に複数の表を指定し、WHERE句やJOIN句で主キー外部キーの対応を示すことで、表と表を結合してデータを取得できます。

結合条件を書かずに2つの表を指定すると「直積(すべての行の組み合わせ)」が返される点は注意が必要です。

では、この構文が試験でどのように出題されるか見ていきましょう。

💡 SELECT文の核心を3行で

・テーブルからデータを抽出するDMLの命令で、記述順はSELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
・WHEREは「行単位の条件」、HAVINGは「グループ集計後の条件」
・集計関数(COUNT, SUM, AVG, MAX, MIN)とDISTINCTはSELECT句で使用する


試験ではこう出る!

SELECT文は、IP・FE・APすべての午前問題で毎回のように出題される最頻出テーマです。出題パターンは3つに分かれます。

📊 過去問での出題実績(一部抜粋)

試験回 出題内容 問われたポイント
IP H31春
問95
関係データベースを操作するための言語を選ぶ問題 SQL=データベース操作言語であることの基本知識
FE R2免除
問28
2つの表を結合するSELECT文の実行結果を選ぶ問題 WHERE句による結合条件の読み取りと結果の導出
FE H28秋
問28
関係代数の直積に対応するSELECT文を選ぶ問題 直積・差集合(EXCEPT)・和集合(UNION)・積集合(INTERSECT)の区別
AP R5秋
問29
NOT EXISTSを使った相関副問合せの結果行数を求める問題 副問合せの実行ロジックとNOT EXISTSの動作
AP R6秋
問30
同一結果を得るためにSQL文の空欄に入る句を選ぶ問題 INNER JOINとウィンドウ関数(PARTITION BY)の理解

📝 IPA試験での出題パターン

パターン1:「SQL文の実行結果を選べ」(FE・AP頻出)
テーブルとSQL文が提示され、4つの結果表から正しいものを選ぶ形式。WHERE句の結合条件を1行ずつ当てはめて結果を導出する作業が必要。ミスしやすいのは「結合条件に合致しない行が結果に含まれない」点の見落とし。

パターン2:「空欄に入る句・式を選べ」(FE・AP頻出)
SQL文の一部が空欄になっており、正しい句や条件式を選ぶ形式。GROUP BY句にない列をSELECT句に書けないルールや、HAVINGに集計関数を使う構文がよく問われる。

パターン3:「SQLとは何かを選べ」(IP頻出)
SQL・FAQ・SSL・UMLなど類似略語の中から「データベースを操作する言語」としてSQLを選ばせる形式。SELECT文の構文自体はIPでは問われないため、「SQL=データベースの操作言語」とだけ覚えておけばOK。


【確認テスト】理解度チェック

ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。


Q. 「社員」表に対して次のSQL文を実行したとき、結果として得られるものはどれか。

SELECT 部署, COUNT(*) AS 人数
FROM 社員
WHERE 給与 >= 300
GROUP BY 部署
HAVING COUNT(*) >= 2
  • A. WHERE句で給与300以上の行を抽出し、部署ごとにグループ化した後、人数が2以上のグループだけを返す。
  • B. 社員表のすべての行を部署ごとにグループ化し、各グループの給与の合計が300以上かつ人数が2以上のグループを返す。
  • C. 社員表から給与の昇順で並べ替えた結果のうち、先頭2件を部署ごとに返す。

正解と解説を見る

正解:A

解説:
このSQL文は、まずWHERE句で「給与 >= 300」の行だけに絞り、次にGROUP BY句で部署列を基準にグループ化し、最後にHAVING句で「COUNT(*) >= 2」(グループ内の行数が2以上)のグループだけを返します。SELECT句は「部署」と「COUNT(*)(人数)」を出力します。

選択肢Bは、WHERE句とHAVINGの役割を混同しています。WHERE句は行単位の条件であり、「給与の合計が300以上」という集計条件ではありません。選択肢Cは、ORDER BYやLIMITの動作を述べていますが、このSQL文にはどちらも含まれていません。


よくある質問(FAQ)

Q. SELECT文とSELECT句は何が違いますか?

SELECT文は「SELECT ~ FROM ~ WHERE ~ …」というSQL命令全体を指します。一方、SELECT句はその中の「SELECT 列名1, 列名2」という部分だけを指す用語です。試験の問題文で「SELECT句」と書かれていたら、文全体ではなくSELECTキーワード直後の列指定部分のことだと判断してください。

Q. SELECT文は関係代数のどの演算に対応しますか?

SELECT句で列を選ぶ操作は関係代数の「射影」、WHERE句で行を絞る操作は「選択」に対応します。紛らわしいですが、「SELECTという名前=選択」ではなく「SELECT句=射影、WHERE句=選択」と覚えてください。FE H25春 問28やH28秋 問28で実際にこの対応が出題されています。

Q. 副問合せ(サブクエリ)とは何ですか?

SELECT文の中にさらにSELECT文を入れ子にしたものです。WHERE句の中で「WHERE 列名 IN (SELECT …)」のように使い、内側のSELECT文の結果を外側の条件に利用します。APではNOT EXISTSを使った「相関副問合せ」が出題されることもあります(AP R5秋 問29など)。FEの範囲ではIN句による副問合せの基本パターンを理解しておけば十分です。

Q. 実務でSELECT文はどのような場面で使われますか?

ほぼすべてのWebアプリケーションやシステムで使われています。ECサイトの商品検索、社内システムの売上集計レポート、顧客管理画面の一覧表示など、「データベースからデータを表示する」処理の裏側にはSELECT文が存在します。エンジニアに限らず、マーケティング担当者やデータアナリストがBIツールを使う際にもSELECT文の知識は役立ちます。