MySQLを使ってテーブルの作成方法やデータの新規追加、更新、取得方法を一通り理解している方を対象に、今回はINNER JOIN(内部結合)について解説します。
INNER JOIN(内部結合)は、実際の業務でも頻繁に使用されます。場合によっては、3~5つのテーブルを内部結合することもあるため、その特徴を理解しておくことは非常に重要です。
もし、「内部結合って何?」と思われる方もご安心ください。
この記事では、内部結合の使い方を画像付きで丁寧に解説しますので、一つ一つ疑問を解消していきましょう。
記事後半には簡単にではありますが、外部結合についても軽く紹介しています。
内部結合・外部結合について知りたい人も必見です。
🔰 MySQL初心者におすすめのステップ記事
このページとあわせて読むと理解が深まります!
目次
そもそもINNER JOIN(内部結合)とは何?
まず、内部結合(INNER JOIN)とは、複数のテーブルで共通する列の値が一致するレコードのみを結合して取得する方法です。
簡単に言うと、AテーブルとBテーブルに共通するデータがあれば、そのデータをもとに2つのテーブルを結合できるということです。
内部結合(INNER JOIN)は、一致しないデータを除外して結果を得たいときに役立ちます。
まずは基本的なSQL構文を学んでみよう
カテゴリ | 内容 |
---|---|
JOINの種類 | INNER JOIN(内部結合)、LEFT OUTER JOIN(左外部結合)、RIGHT OUTER JOIN(右外部結合)、FULL OUTER JOIN(完全外部結合) |
INNER JOINの目的 | 共通するカラムの値が一致するレコードのみを取得する |
構文例 | SELECT A.col, B.col FROM A INNER JOIN B ON A.id = B.id; |
活用シーン | 顧客情報と注文情報の結合、カテゴリと商品情報の結合など |
外部結合との違い | INNER JOINは一致するレコードのみ、外部結合は一致しなくても片方のレコードを残す |
INNER JOIN(内部結合)の基本的なSQL構文を学ぼう
内部結合(INNER JOIN)で使うSQL構文は以下になります。
SELECT
A.カラム1,
A.カラム2,
B.カラム1,
B.カラム2
FROM
Aテーブル
INNER JOIN
Bテーブル ON Aテーブル.id = Bテーブル.id;
内部結合を行うために使うのが「INNER JOIN」というコードです。INNER JOINの後ろには結合させたいテーブル名を指定します。ここではBテーブルが該当します。
そして、INNER JOINするテーブルの後には「ON Aテーブル.共通カラム名 = Bテーブル.共通カラム名」を付けます。
これは、AテーブルとBテーブルで共通するカラムを指定する部分です。この指定により、一致するレコードのみを取得します。
上記のSQL構文を実行すると次のようなクエリの動作が行われます。
- AテーブルとBテーブルのidカラムの値が一致する行を結合
- 一致する行のうち、取得するカラムを指定(Aテーブルのカラム1,カラム2など)
内部結合を行うことで、Aテーブルに加えてBテーブルのカラムも取得できるのが特徴です。
次は例題を見ながらより理解度を深めてみましょう!
🔧 自宅で効率よく学びたい方へ
実践的なサポートが受けられるオンラインスクールも要チェックです!
INNER JOIN(内部結合)の例題をもとに理解度を深める
用意したテーブルは次の通りです。
▼取引先管理テーブル
▼フルーツ管理テーブル
▼フルーツ取引管理テーブル
まずは、取引先管理テーブルを見てみましょう。このテーブルには取引先IDと取引先名の2つの情報があります。
次に、フルーツ管理テーブルも見てみましょう。このテーブルにはフルーツIDとフルーツ名の2つの情報が管理されています。
最後に、フルーツ取引管理テーブルを確認しましょう。このテーブルには複数の情報が含まれていますが、先ほど確認したフルーツIDと取引先IDも含まれています。
各テーブルの共通する項目を以下のように整理してみました。
共通したIDをもとに内部結合ができそうではありませんか?
内部結合(INNER JOIN)をしてみる
共通する項目があるので、次はこれを使って内部結合(INNER JOIN)をしてみます。
使うSQL構文はコチラ
SELECT
フルーツ取引管理テーブル.id,
フルーツ取引管理テーブル.フルーツ名,
取引先管理テーブル.取引先名,
フルーツ取引管理テーブル.金額,
フルーツ取引管理テーブル.仕入れ日
FROM
フルーツ取引管理テーブル
INNER JOIN
フルーツ取引管理テーブル ON フルーツ取引管理テーブル.フルーツID = フルーツ管理テーブル.フルーツ
INNER JOIN
取引先管理テーブル ON フルーツ取引管理テーブル.取引先ID = 取引先管理テーブル.取引先ID;
1つずつ見ていきましょう。
メインとなるテーブルはフルーツ取引管理テーブルで、このテーブルに対してフルーツ管理テーブルと取引先管理テーブルを内部結合しています。
内部結合をする際の注意ポイントは「一致するデータであること」です。
ここでは、フルーツIDがどちらのテーブルにも存在するので「INNER JOIN フルーツ取引管理テーブル ON フルーツ取引管理テーブル.フルーツID = フルーツ管理テーブル.フルーツ」としています。
これらを踏まえた上で、SQL構文を実行すると、以下の結果を取得できます。
内部結合を使えば、より参照できる範囲が増えるのがメリットだよ!
内部結合と外部結合の違いについて
本記事の頭でも軽く触れましたが、SQLには外部結合という結合方法も存在します。
内部結合は2つのテーブルの共通キーが一致する行のみを結合するのに対し、外部結合は一方のテーブルに存在し、他方のテーブルには存在しないデータも結果に含めることが特徴です。
外部結合にはいくつかの種類がありますので、簡単に紹介しますね。
外部結合の種類
外部結合は以下の3種類に分けられます。
- 左外部結合(LEFT OUTER JOIN)
- 右外部結合(RIGHT OUTER JOIN)
- 完全外部結合(FULL OUTER JOIN)
各結合の特徴について軽く紹介しますね。
左外部結合(LEFT OUTER JOIN)の特徴
左外部結合(LEFT OUTER JOIN)のサンプルコードはこちら
SELECT
A.カラム1,
A.カラム2,
B.カラム1,
B.カラム2
FROM
Aテーブル
LEFT OUTER JOIN
Bテーブル ON Aテーブル.id = Bテーブル.id;
左外部結合(LEFT OUTER JOIN)は、FROMで最初に指定されたテーブルすべての行を結果として表示させます。
そして、LEFT OUTER JOINで指定されたテーブルに一致する行がある場合、そのデータを結果に表示させます。
もし、一致しない場合は、LEFT OUTER JOINしたテーブルのカラムはNULLと表示されます。
例題としてフルーツ取引管理テーブルと取引先管理テーブルを使って左外部結合をみてみましょう。
今回用したデータは次の2つ。
▼取引先管理テーブル
▼フルーツ取引管理テーブル
見てわかる通り、フルーツ取引管理テーブルの赤枠の部分ある「4」という取引先IDは、取引先管理テーブルには存在しません。
この状態で左外部結合をすると、次の結果を取得します。
内部結合だったら取得されずに省かれるはずですが、左外部結合なら取得できてNULLと表示する動きをします。
現場ではがっつり使うので慣れておくと就職・転職先でも役立つよ!
右外部結合(RIGHT OUTER JOIN)の特徴
右外部結合(RIGHT OUTER JOIN)のサンプルコードはこちら
SELECT
A.カラム1,
A.カラム2,
B.カラム1,
B.カラム2
FROM
Aテーブル
RIGHT OUTER JOIN
Bテーブル ON Aテーブル.id = Bテーブル.id;
右外部結合(RIGHT OUTER JOIN)は左外部結合とは逆の動きをします。
RIGHT OUTER JOINに指定されたテーブルのすべての行を取得し、FROMに指定したテーブルに一致する行があれば結果に表示、なければそのカラムはNULLと表示されます。
こちらも現場では使われるものなので例題を見てみましょう。
用意したテーブルはこちら
▼取引先管理テーブル
▼フルーツ取引管理テーブル
取引先管理テーブルには5つの会社名があり、そのうち赤枠の2つがまだフルーツ取引管理テーブルに載っていない状態です。
この状態で右外部結合を実行すると、次の結果が取得できます。
結果を見てわかるとおり、フルーツ取引管理テーブルに登録されていないidや仕入れ日などはNULLとなり、取引先名だけ表示した結果を取得します。
完全外部結合(FULL OUTER JOIN)の特徴
最後に紹介する外部結合は、完全外部結合(FULL OUTER JOIN)です。
完全外部結合(FULL OUTER JOIN)のサンプルコードはこちらになります。
SELECT
A.カラム1,
A.カラム2,
B.カラム1,
B.カラム2
FROM
Aテーブル
FULL OUTER JOIN
Bテーブル ON Aテーブル.id = Bテーブル.id;
完全外部結合はAテーブルとBテーブルのすべての行を含めて一致する場合は結合し、一致しない場合はカラムにNULLが入ります。
完全外部結合は正直現場で使われているのを見たことがありません…。
私がまだ歴が浅いというのも関係しているのかもしれませんが、初心者が学ぶには優先度低くても問題ないように思えます。
🔧 自宅で効率よく学びたい方へ
実践的なサポートが受けられるオンラインスクールも要チェックです!
内部結合を使うメリット
内部結合と外部結合について学んだところで、最後に内部結合を使うメリットは何かについて話させてください。
内部結合を使うメリットは大きく以下の内容が挙げられます。
- 分散されたデータの統合が容易に行える
- 不整合なデータを省ける
- 結合条件に一致するレコードのみを取得できる
- 不要な重複データを排除できる
結合条件に一致するレコードのみを取得できるので大量のデータを保有する場合にも、効率よく必要なデータだけを取得できます。
また、一致するレコードのみを取得できるということは、正確なデータだけを取得できるとも言えますね。
MySQLを学ぶのにオススメの書籍を紹介
最後におすすめの書籍を紹介するね!
MySQLを0から書籍で勉強するならオススメなのが「1週間でMySQLの基礎が学べる本」です。
本のタイトルの通り、一週間で基礎知識を学べる内容となっているため、独学でも十分に学習が行えます。
📘 書籍でじっくり学びたい方へ
MySQLを基礎から学べる一冊として人気なのがこちら👇
「1週間でMySQLの基礎が学べる本」は、未経験からでもわかりやすく学習できる構成になっています。
💡 独学に限界を感じたらスクールを活用しよう!
学習に不安を感じる方は、無料カウンセリングを活用して自分に合った環境を見つけてくださいね。
まとめ
内部結合と外部結合について解説しましたが、いかがでしたか?
特に内部結合はかなり利用するので、使えるようになっていると即戦力として活躍できます!
まずは特徴を覚えて目的に応じて内部結合・外部結合を使い分けてみよう!