INNER JOINとは?SQL初心者向けに基本から使い方までわかりやすく解説
INNER JOIN(インナージョイン)とは、複数のテーブルの中から、共通するデータだけを結合して取得するSQLの機能です。
データベースを扱うIT業務では、社員情報と部署情報、顧客情報と注文情報など、複数のテーブルを組み合わせてデータを取得する場面が数多くあります。その中でも最も利用されるJOINがINNER JOINです。
- INNER JOINとは?
- INNER JOINが使われる場面
- なぜINNER JOINが重要なのか
- INNER JOINのイメージ
- INNER JOINの基本構文
- INNER JOINの実際の利用例
- 初心者が混乱しやすいポイント
- INNER JOINとLEFT JOINの違い
- IT現場でよくある利用例
- 業務でよくあるトラブル
- 原因の切り分け
- 確認する順番
- GUIでの確認方法
- CUI(コマンド)での確認方法
- ログの確認方法
- イベントビューアーの確認方法
- PowerShellで確認できること
- ショートカットキー
- 初心者がやりがちなミス
- 筆者の経験談
- 上司へ報告するポイント
- エスカレーションするタイミング
- 新人が覚えておくべきポイント
- 関連するIT用語
- よくある質問(FAQ)
- まとめ
INNER JOINとは?
INNER JOINは、SQL(Structured Query Language)で使用する結合方法の一つです。
指定した列の値が両方のテーブルで一致したデータだけを表示します。
一致しないデータは結果に含まれません。
INNER JOINが使われる場面
実際のIT現場では、次のような業務で利用されています。
- 社員情報と部署情報を表示する
- 注文情報と顧客情報を組み合わせる
- 商品情報とカテゴリ情報を取得する
- 売上データと店舗情報を集計する
- ユーザー情報と権限情報を表示する
データベースを利用するシステムでは、ほぼ毎日のようにINNER JOINが使われています。
なぜINNER JOINが重要なのか
データベースでは、データの重複を防ぐために情報を複数のテーブルへ分けて保存します。
例えば社員情報と部署情報を別々に管理することで、部署名が変更になっても部署テーブルだけを更新すれば済みます。
その代わり、必要な情報を表示するときはINNER JOINでテーブル同士を結合します。
INNER JOINのイメージ
社員テーブル
| 社員ID | 氏名 | 部署ID |
|---|---|---|
| 1001 | 山田 | 1 |
| 1002 | 佐藤 | 2 |
| 1003 | 鈴木 | 5 |
部署テーブル
| 部署ID | 部署名 |
|---|---|
| 1 | 総務部 |
| 2 | 営業部 |
| 3 | 情報システム部 |
INNER JOINを実行すると、部署IDが一致する社員だけが表示されます。
| 社員ID | 氏名 | 部署名 |
|---|---|---|
| 1001 | 山田 | 総務部 |
| 1002 | 佐藤 | 営業部 |
部署IDが「5」の鈴木さんは、部署テーブルに一致するデータがないため表示されません。
INNER JOINの基本構文
基本的な書き方は次のようになります。
SELECT * FROM 社員 INNER JOIN 部署 ON 社員.部署ID = 部署.部署ID;
ONでは、どの列同士を関連付けるかを指定します。
INNER JOINの実際の利用例
社員名と部署名を取得する
SELECT 社員.氏名, 部署.部署名 FROM 社員 INNER JOIN 部署 ON 社員.部署ID = 部署.部署ID;
このSQLでは、社員名と部署名を一覧で表示できます。
初心者が混乱しやすいポイント
- INNER JOINとLEFT JOINの違いが分からない
- ON句を書き忘れる
- 結合する列を間違える
- 同じ列名が複数ありエラーになる
- 取得件数が思ったより少ない
取得件数が少ない場合は、結合条件やデータの有無を確認しましょう。
INNER JOINとLEFT JOINの違い
| 比較項目 | INNER JOIN | LEFT JOIN |
|---|---|---|
| 一致するデータ | 表示する | 表示する |
| 一致しない左側データ | 表示しない | 表示する |
| 利用頻度 | 非常に高い | 高い |
迷った場合は、「一致したデータだけ取得する」がINNER JOINと覚えると理解しやすくなります。
IT現場でよくある利用例
| 業務 | 結合するテーブル |
|---|---|
| 社員管理 | 社員情報+部署情報 |
| 販売管理 | 注文情報+顧客情報 |
| 在庫管理 | 商品情報+在庫情報 |
| 会員管理 | 会員情報+契約情報 |
| アクセス管理 | ユーザー情報+権限情報 |
業務でよくあるトラブル
取得件数が0件になる
結合条件が間違っている、または一致するデータが存在しない可能性があります。
取得件数が少ない
片方のテーブルに対応するデータが不足している場合によく発生します。
SQLエラーが発生する
列名の指定ミスや、同じ列名をテーブル名なしで指定していることが原因の場合があります。
原因の切り分け
| 確認項目 | 確認内容 |
|---|---|
| 結合キー | 正しい列を指定しているか |
| データ型 | 数値型・文字列型が一致しているか |
| データ件数 | 両テーブルにデータがあるか |
| NULL | 結合キーにNULLが含まれていないか |
| WHERE条件 | 検索条件で除外していないか |
確認する順番
- テーブルにデータが存在するか確認する
- 結合キーを確認する
- 結合キーのデータ型を確認する
- ON句を確認する
- WHERE条件を確認する
- 取得件数が想定どおりか確認する
GUIでの確認方法
- SQL Server Management Studio(SSMS)
- MySQL Workbench
- pgAdmin
- DBeaver
- Oracle SQL Developer
GUIツールでは、SQLを実行しながら結果を表形式で確認できます。
CUI(コマンド)での確認方法
- mysql
- sqlcmd
- psql
- SQL*Plus
コマンドラインからSQLを実行し、JOIN結果を確認できます。
ログの確認方法
INNER JOIN自体はWindowsイベントログには記録されません。
SQLエラーが発生した場合は、データベースサーバーのエラーログや実行ログを確認します。
イベントビューアーの確認方法
通常は不要ですが、データベースサービスが停止している場合や接続エラーが発生した場合は、Windowsイベントビューアーでサービス関連のログを確認します。
PowerShellで確認できること
- SQL Serverサービスの状態確認
- サーバーへの接続確認
- TCPポートの疎通確認
- サービスの起動状態確認
ショートカットキー
| キー | 用途 |
|---|---|
| F5 | SQL実行(SSMS) |
| Ctrl + A | 全文選択 |
| Ctrl + C | 実行停止 |
| Ctrl + F | 文字検索 |
初心者がやりがちなミス
- ON句を書き忘れる
- 主キーではなく別の列で結合する
- INNER JOINなのに全件取得できると思い込む
- WHERE句で必要なデータまで除外する
- 取得件数を確認しない
筆者の経験談
社内SEとして業務システムの調査を行った際、取得件数が想定より少ない原因を調べたところ、INNER JOINで結合していたマスターテーブルに登録漏れがありました。SQL自体は正しくても、元データが不足していると結果が変わるため、テーブルの内容まで確認することが重要だと実感しました。
上司へ報告するポイント
- 実行したSQL
- 結合したテーブル
- 結合キー
- 取得件数
- 期待値との差
- 発生したエラー内容
エスカレーションするタイミング
- 本番データに影響する修正が必要な場合
- データ不整合が疑われる場合
- 原因が特定できない場合
- システム全体へ影響が及ぶ可能性がある場合
新人が覚えておくべきポイント
- INNER JOINは一致したデータだけ取得する。
- ON句で結合条件を正しく指定する。
- 主キーと外部キーの関係を理解する。
- 取得件数が想定どおりか必ず確認する。
- SQLを書く前にテーブル構造を把握する。
関連するIT用語
- SQL(Structured Query Language)
- JOIN
- LEFT JOIN
- RIGHT JOIN
- 主キー(Primary Key)
- 外部キー(Foreign Key)
- テーブル(Table)
- インデックス(Index)
よくある質問(FAQ)
INNER JOINとJOINは違いますか?
多くのデータベースでは、JOINと記述した場合はINNER JOINと同じ意味になります。ただし、可読性を高めるために「INNER JOIN」と明示することが推奨されます。
INNER JOINは何個まで使えますか?
複数のテーブルを連続して結合できます。ただし、結合数が増えるほどSQLが複雑になり、処理時間も長くなる可能性があります。
INNER JOINとLEFT JOINはどちらを使えばよいですか?
一致するデータだけ必要な場合はINNER JOIN、一致しないデータも含めて取得したい場合はLEFT JOINを使用します。
まとめ
INNER JOINは、複数のテーブルから一致するデータだけを取得する最も基本的で利用頻度の高いJOINです。
データベースを扱うIT業務では欠かせない知識であり、社内SEや運用保守、ヘルプデスクでも理解しておくと調査やデータ確認がスムーズになります。
まずは「一致したデータだけ表示する」という基本を理解し、結合キーや取得件数を確認する習慣を身に付けることで、正確なSQLを作成できるようになります。
