SQL(基本構文と結合)
データベース
SQLはデータベースと会話するための言語!SELECT文と結合をマスターしよう!
SQL(基本構文と結合)
簡単にいうと
SQLはデータベースと会話するための言語!SELECT文と結合をマスターしよう!
① SELECT文の基本
SQLでデータを取得する最も基本的な構文がSELECT文です。基本構造は以下のとおりです。
```sql
SELECT 列名1, 列名2, ...
FROM テーブル名
WHERE 条件式
```
- SELECT句: 取得したい列を指定する → 関係演算の「射影」に対応
- FROM句: 対象のテーブルを指定する
- WHERE句: 取得する行の条件を指定する → 関係演算の「選択」に対応
全列を取得する場合は `SELECT *` と書きます。WHERE句を省略すると全行が取得されます。
② WHERE句の条件指定
WHERE句では、さまざまな演算子を使って条件を細かく指定できます。
| 演算子・構文 | 意味 | 使用例 |
|---|---|---|
| `=`, `<>`, `<`, `>`, `<=`, `>=` | 比較演算子 | `WHERE price >= 1000` |
| `AND` | 両方の条件を満たす(論理積) | `WHERE price >= 1000 AND category = '食品'` |
| `OR` | いずれかの条件を満たす(論理和) | `WHERE category = '食品' OR category = '飲料'` |
| `NOT` | 条件の否定 | `WHERE NOT category = '食品'` |
| `BETWEEN A AND B` | A以上B以下の範囲 | `WHERE price BETWEEN 500 AND 2000` |
| `LIKE` | パターンマッチング(部分一致) | `WHERE name LIKE '%田%'`(「田」を含む) |
| `IS NULL` / `IS NOT NULL` | NULL値の判定 | `WHERE phone IS NULL` |
論理演算子の優先順位は `NOT > AND > OR` です。たとえば `A OR B AND C` は `A OR (B AND C)` と解釈されます。意図した優先順位と異なる場合は、括弧を使って明示的に指定しましょう。
LIKE演算子のワイルドカードは2つあります。
- `%`: 任意の0文字以上に一致(例: `'%山'` → 「横山」「丸山」「富士山」)
- `_`: 任意の1文字に一致(例: `'_田'` → 「山田」「吉田」、「太田」にはマッチしない)
③ 結合(JOIN)
複数のテーブルを関連付けてデータを取得する操作が結合です。関係演算の「結合(Join)」に対応します。
| 結合の種類 | 動作 | 結果 |
|---|---|---|
| INNER JOIN(内部結合) | 両方のテーブルに共通して存在する行のみを結合 | 一致しない行は除外される |
| LEFT OUTER JOIN(左外部結合) | 左テーブルの全行を保持し、右テーブルで一致する行を結合 | 右テーブルに一致がなければNULLが入る |
| RIGHT OUTER JOIN(右外部結合) | 右テーブルの全行を保持し、左テーブルで一致する行を結合 | 左テーブルに一致がなければNULLが入る |
具体例を見てみましょう。「社員」テーブルと「部署」テーブルがあるとします。
```sql
-- 内部結合: 部署が割り当てられている社員のみ
SELECT 社員.名前, 部署.部署名
FROM 社員
INNER JOIN 部署 ON 社員.部署コード = 部署.部署コード
-- 左外部結合: 全社員+部署情報(部署未割当ならNULL)
SELECT 社員.名前, 部署.部署名
FROM 社員
LEFT OUTER JOIN 部署 ON 社員.部署コード = 部署.部署コード
```
内部結合では、部署コードが一致しない社員(たとえば部署未配属の新入社員)は結果に含まれません。一方、左外部結合では全社員が結果に含まれ、部署未配属の社員は部署名がNULLとして表示されます。
④ DDLとDML
SQLの命令は大きく2つのグループに分類されます。
| 分類 | 正式名称 | 目的 | 主な命令 |
|---|---|---|---|
| DDL | Data Definition Language(データ定義言語) | テーブルの構造を定義・変更・削除する | `CREATE`(作成)、`ALTER`(変更)、`DROP`(削除) |
| DML | Data Manipulation Language(データ操作言語) | テーブルのデータを操作する | `SELECT`(検索)、`INSERT`(追加)、`UPDATE`(更新)、`DELETE`(削除) |
DDLは「箱(テーブル)そのものを作る・壊す」操作で、DMLは「箱の中身(データ)を出し入れする」操作です。この区別は試験で問われることがあるので明確に理解しておきましょう。
具体例
INNER JOINとLEFT JOINの違いを、簡単なデータで確認しましょう。
「社員テーブル」
| 社員ID | 名前 | 部署コード |
|---|---|---|
| 1 | 田中 | D01 |
| 2 | 山田 | D02 |
| 3 | 佐藤 | NULL |
「部署テーブル」
| 部署コード | 部署名 |
|---|---|
| D01 | 営業部 |
| D02 | 技術部 |
| D03 | 総務部 |
INNER JOINの結果(共通する行のみ):
| 名前 | 部署名 |
|---|---|
| 田中 | 営業部 |
| 山田 | 技術部 |
→ 佐藤は部署コードがNULLなので除外されます。
LEFT JOINの結果(左テーブル=社員の全行を保持):
| 名前 | 部署名 |
|---|---|
| 田中 | 営業部 |
| 山田 | 技術部 |
| 佐藤 | NULL |
→ 佐藤も含まれ、部署名はNULLになります。
なお、D03(総務部)はどちらの結合でも結果に現れません。RIGHT JOINを使えばD03も結果に含まれます。

射影(列の抽出)

選択(行の抽出)

結合(表の結合)
試験のポイント
- ・要は「INNER JOIN=共通行のみ、LEFT JOIN=左テーブル全行(右になければNULL)、RIGHT JOIN=右テーブル全行」
- ・DDL=構造定義(CREATE/ALTER/DROP)、DML=データ操作(SELECT/INSERT/UPDATE/DELETE)
- ・LIKEの%=0文字以上、_=1文字も頻出
- ・論理演算子の優先順位NOT>AND>ORに注意
独学で診断士合格を目指すなら
過去問演習・AI添削・テキストPDFまで
すべて揃ったプレミアムプランで合格を掴む!
予備校代の1/10以下で、独学の不安をまるごと解決
- 📝1次試験 過去問演習(全7科目・年度別)無制限プレミアム限定
- 🤖2次試験 AI添削(事例I〜IV・無制限)最適なフィードバックで実力アッププレミアム限定
- 📄科目別テキストPDFダウンロード。印刷して好きな使い方で学習できるプレミアム限定
- 🔖ブックマーク機能で苦手分野・何度も確認したい部分を管理プレミアム限定
- 📊学習記録・成績管理で自分の進捗を可視化プレミアム限定
プレミアムプラン
¥9,800(税込)
自動更新なし / 1年間有効
決済は Stripe(PCI-DSS準拠)で安全に処理されます。カード情報は当サービスに保存されません。