情報処理試験を勉強していると、「SQLって何?プログラミング言語とは違うの?」と疑問に思う場面が必ず出てきます。
この記事では、SQLの定義・3つの分類・SELECT文の基本構文を、日常の例え話と図解で整理します。
対象試験と出題頻度
SQLは、ITパスポート・基本情報技術者・応用情報技術者のすべてで出題されるテーマです。
関係データベースを操作するための言語として、SELECT文の読み取り問題からDDL・DML・DCLの分類問題まで、あらゆる角度で問われます。
詳細をクリックして確認
ITパスポート
基本情報技術者
応用情報技術者
★★★★★(頻出度S)
ランクS(超重要)絶対に覚える必要あり
用語の定義
SQL(Structured Query Language)とは、一言で言うと
「関係データベースに対して、データの検索・追加・更新・削除や、表の作成・権限の設定などを指示するための標準言語」
のことです。
イメージとしては、「図書館の司書に渡す依頼書」です。
利用者が「○○ジャンルの本を一覧で見せてほしい」「新しい本を棚に登録してほしい」「この本の情報を修正してほしい」と書いた依頼書を司書に渡すと、司書(DBMS)が実際の作業を代行してくれます。
SQLはこの「依頼書のフォーマット」に相当します。
📊 SQLの基本情報
| 項目 | 内容 |
|---|---|
| 正式名称 | Structured Query Language |
| 種別 | データベース言語(プログラミング言語ではない) |
| 国際規格 | ISO/IEC 9075 として標準化 |
| 3つの分類 | DDL(データ定義言語)、DML(データ操作言語)、DCL(データ制御言語) |
| 操作対象 | 関係データベース(RDB)の表(テーブル) |
解説
関係データベースはデータを「表」の形で管理しますが、表を作ったりデータを出し入れしたりするには、DBMSに対して命令を出す手段が必要です。
この命令体系がSQLであり、ISO/IEC 9075として国際標準化されています。
SQLは役割に応じて3つに分類されます。
DDL・DML・DCLの3分類
| 分類 | 正式名称 | 役割 | 主な命令 |
|---|---|---|---|
| DDL | Data Definition Language (データ定義言語) |
表やビューなどのデータベース構造を定義・変更・削除する | CREATE, ALTER, DROP |
| DML | Data Manipulation Language (データ操作言語) |
表に格納されたデータの検索・追加・更新・削除を行う | SELECT, INSERT, UPDATE, DELETE |
| DCL | Data Control Language (データ制御言語) |
アクセス権限の付与・取消やトランザクションの確定・取消を行う | GRANT, REVOKE, COMMIT, ROLLBACK |
DDL・DML・DCLの役割イメージ
DDL
「棚(表)を作る・壊す」
CREATE / ALTER / DROP
DML
「本を出し入れする」
SELECT / INSERT / UPDATE / DELETE
DCL
「貸出カードの権限管理」
GRANT / REVOKE / COMMIT / ROLLBACK
※ 試験で最も多く出題されるのはDMLのSELECT文
SELECT文の基本構文
3分類のうち、試験で圧倒的に問われるのがDMLのSELECT文です。
「どの表から、どの条件で、どの列を取り出すか」を指定する構文であり、各句の記述順と処理順を正しく覚えることが得点の土台になります。
— SELECT文の基本構文(記述順)
SELECT 列名1, 列名2, … — ① 取り出す列
FROM 表名 — ② 対象の表
WHERE 条件式 — ③ 行の絞り込み
GROUP BY 列名 — ④ グループ化
HAVING 条件式 — ⑤ グループの絞り込み
ORDER BY 列名 [ASC|DESC] — ⑥ 並び替え
ここだけは確実に押さえてください。
WHEREは「行の絞り込み(グループ化前)」、HAVINGは「グループの絞り込み(グループ化後)」です。この2つの混同が最も多い失点パターンです。
SELECT文の処理順序
記述順と処理順が異なる点に注意が必要です。
DBMSは以下の順番で各句を処理します。
SELECT文の処理順序
⚠ 最頻出の混同ポイント
WHERE → グループ化前に行を絞る
HAVING → グループ化後にグループを絞る
📝 記述順との違い
コードではSELECTを最初に書くが、DBMSの処理はFROMから始まる。この違いが穴埋め問題で狙われる。
💡 覚え方
「フ・ホ・グ・ハ・セ・オ」
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
主な集約関数
SELECT文ではデータの集計に「集約関数」を使います。GROUP BYと組み合わせて出題されることが大半です。
| 関数 | 機能 | 記述例 |
|---|---|---|
| COUNT | 行数を数える | COUNT(*) |
| SUM | 合計を求める | SUM(点数) |
| AVG | 平均を求める | AVG(点数) |
| MAX | 最大値を返す | MAX(点数) |
| MIN | 最小値を返す | MIN(点数) |
副問合せと結合
FE・APではSELECT文の中にさらにSELECTを埋め込む「副問合せ(サブクエリ)」や、複数の表を横につなげる「結合(JOIN)」が頻出です。
概要だけ押さえておきます。
| 概念 | 概要 |
|---|---|
| 副問合せ | WHERE句やFROM句の中にSELECT文をネストし、その結果を条件や仮想表として利用する |
| 内部結合 (INNER JOIN) |
2つの表で結合条件が一致する行だけを取り出す。両方の表に存在するデータのみ結果に含まれる |
| 外部結合 (OUTER JOIN) |
一方の表に存在するが他方にはない行も、NULLを補って結果に含める。LEFT / RIGHT / FULLの3種がある |
では、これらの知識が試験でどのように問われるか見ていきましょう。
💡 SQLの核心を3行で
・関係データベースを操作するための国際標準言語(ISO/IEC 9075)
・DDL(定義)・DML(操作)・DCL(制御)の3分類がある
・SELECT文ではWHERE(行の絞り込み)とHAVING(グループの絞り込み)の区別が最重要
試験ではこう出る!
SQLは、IP・FE・APいずれの午前(科目A)でもほぼ毎回出題される最頻出テーマです。特にSELECT文の穴埋め・結果推定がメインで、DDLやDCLの命令分類を問う問題も定期的に登場します。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE R7年度 科目A 問6 |
IN句を使ったSELECT文と同じ結果が得られるSQL文を選ぶ問題 | ・IN句はOR条件と等価 ・AND条件やBETWEENとの違いがひっかけ |
| FE R1秋 午前 問26 |
GROUP BYとHAVINGの穴埋め問題。学生ごとの平均点を算出し80点以上を抽出 | ・GROUP BYの対象列の選択 ・HAVINGとWHEREの混同がひっかけ |
| AP R6秋 午前 問30 |
ROW_NUMBER()とOVER句(ウィンドウ関数)の穴埋め問題 | ・PARTITION BYとORDER BYの組み合わせ ・APレベルではウィンドウ関数も出題範囲 |
| AP R5秋 午前 問28 |
更新可能なビューを作成するSQL文を選ぶ問題 | ・集約関数やDISTINCT、GROUP BYを含むビューは更新不可 |
| IP R6年度 問93 |
ワイルドカード(%と_)を使ったLIKE検索の抽出件数を問う問題 | ・%は0文字以上、_は任意の1文字 ・パターンマッチングの正確な理解 |
📝 IPA試験での出題パターン
パターン1:SELECT文の穴埋め・結果推定(最頻出)
表の定義とSQL文が示され、空欄に入る句や実行結果を選ぶ形式。GROUP BY+HAVINGの組み合わせ、WHERE句の条件式、IN句とOR条件の等価性が繰り返し出題される。
パターン2:DDL/DML/DCLの分類問題
「CREATE TABLEはどの分類に属するか」「GRANTの役割は何か」のように、命令の所属を選ばせる形式。命令名と分類の対応表を暗記しておけば即答できる。
パターン3:副問合せ・結合の読み取り
FE・APレベルでは、INNER JOINやサブクエリを含むSQL文を読ませ、結果の行数や列値を問う形式が定番。
IPレベルでは関係演算(選択・射影・結合)との対応やワイルドカードの意味が問われる程度です。FE以上ではSQL文を「読んで結果を出せる」レベルが必要になります。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. SQLにおけるDML(データ操作言語)の命令として、正しい組み合わせはどれでしょうか?
- A. SELECT, INSERT, UPDATE, DELETE
- B. CREATE, ALTER, DROP, TRUNCATE
- C. GRANT, REVOKE, COMMIT, ROLLBACK
正解と解説を見る
正解:A
解説:
DMLは「表に格納されたデータの検索・追加・更新・削除」を担う命令群です。SELECT・INSERT・UPDATE・DELETEの4つがこれに該当します。
選択肢BはDDL(データ定義言語)の命令です。DDLは表やビューなどの構造を定義・変更・削除する役割を持ちます。選択肢CはDCL(データ制御言語)の命令です。DCLはアクセス権限の付与・取消やトランザクションの確定・取消を担当します。
よくある質問(FAQ)
Q. SQLはプログラミング言語ですか?
プログラミング言語ではありません。SQLは「データベース言語」に分類されます。JavaやPythonのようにif文やループでロジックを記述するのではなく、「何を取り出したいか」を宣言的に記述する言語です。ただし、ストアドプロシージャなどで手続き的な処理を書ける拡張(PL/SQLなど)は存在します。IPA試験ではあくまで「データベース言語」として扱われるため、プログラミング言語と混同しないよう注意してください。
Q. SQLとNoSQLの関係は?
SQLは関係データベース(RDB)専用の言語です。一方、NoSQLのデータベース(KVS、ドキュメント型など)は基本的にSQLを使わず、各製品固有のAPIやクエリ言語で操作します。「Not only SQL」の名前の通り、SQLとは異なるアプローチでデータを扱う仕組みです。
Q. WHEREとHAVINGの使い分けを一言で教えてください。
WHEREは「個々の行」に対する条件指定、HAVINGは「GROUP BYでグループ化した後のグループ」に対する条件指定です。例えば「点数が80以上の行だけ集計対象にしたい」ならWHERE、「集計した平均点が80以上のグループだけ表示したい」ならHAVINGを使います。
Q. 実務で使われるDBMS製品ごとにSQLは違いますか?
基本的な構文はISO標準に準拠しているため、MySQL・PostgreSQL・Oracle・SQL Serverなどの主要製品で共通です。ただし、日付関数の書き方やウィンドウ関数の対応範囲など、製品固有の拡張(方言)が存在します。IPA試験では標準SQLの範囲で出題されるため、特定製品の方言を覚える必要はありません。
Q. SQLインジェクションとSQLの関係は?
SQLインジェクションは、Webアプリケーションの入力欄に悪意あるSQL文を紛れ込ませ、データベースを不正に操作する攻撃手法です。SQL自体の脆弱性ではなく、アプリケーション側でSQL文を組み立てる際の実装不備が原因です。対策としてはプレースホルダ(バインド変数)を使った入力値のエスケープが基本になります。