MySQLでINNER JOINを使って内部結合する方法【初心者向け】

MySQLで【INNER JOIN】を使って内部結合する方法を初心者向けに解説した記事です。INNER JOINを使えば、別々のテーブルのデータを、キーとなるデータに紐づけて、抽出することができます。書き方を覚えておきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

MySQLの初心者向けに、基本的な使い方を解説する記事です。

今回は、INNER JOINを使って内部結合する方法を紹介します。

データベースのなかにはテーブルが格納されていますが、ユーザー情報や企業情報など、内容ごとテーブルをわけて作り、データを管理するのが一般的です。

しかし、ときにはテーブルの枠を超えてデータを抽出し、使用したいときもありますよね。

INNER JOINを使えば、普段は別々のテーブルの中にあるデータを、あるデータをもとに紐づけて、いっしょに抽出することができます。

なお本記事は、MySQLを扱うTechAcademyのPHPオンライン講座の内容をもとにしています。

 

今回の記事の内容は動画でもご覧いただけます。
テキストよりも動画の方が理解しやすいという場合はぜひご覧ください。

 

大石ゆかり

田島メンター!テーブルって他のテーブルと結合することが出来るんですか?

田島悠介

何か共通項があるテーブル同士だと結合することが出来るんだ。

大石ゆかり

複数枚のテーブルをつなぎ合わせられるなんて、すごいですね!

田島悠介

カテゴリーとかタグとかで使われてるんだよ。さっそく書き方など見てみよう!サンプルでは、ユーザーテーブルと、そのユーザーの情報を別途格納しているテーブルを内部結合してみるよ。

 

INNER JOINを使って内部結合する

今回は、このsampledbというデータベースをもとに解説を進めます。
スクリーンショット 2015-01-28 16.31.26

データベースsampledbの中には、userorganizationという2つのテーブルが入っていますね。

 

selectのコマンドを使って、まずはそれぞれのテーブル内のデータを見てみましょう。

select * from user;

スクリーンショット 2015-01-28 17.31.09

 

select * from organization;

スクリーンショット 2015-01-28 20.28.41

今回は、userテーブルのorganization_idと、organizationテーブルのidをもとに双方を紐付け、データを抽出してみます。

 

抽出するデータは、

  • userテーブルからはusernameemail
  • organizationテーブルからはname

にします。

 

 

INNER JOINの構文

内部結合は次のように書きます。

 

select テーブル名1.フィールド名, テーブル名2.フィールド名

from テーブル名1

inner join テーブル名2

on テーブル名1.フィールド名 = テーブル名2.フィールド名;

 

なんだか難しそうですが、流れを簡単に説明すると、

selectに続けて、どのテーブルのどのフィールドデータをそれぞれ取り出すのかということを「テーブル名.フィールド名」で明示し、「,」で区切っていきます。

それからfrom結合の基準となるテーブル名を書き、inner joinもう一方のテーブル名を書きます。

最後に、on各テーブルのどのフィールドを基準に紐づくのか=で繋いで書きます。

 

この流れで書くとこうなります。

select user.username, user.email, organization.name
from user
inner join organization
on user.organization_id = organization.id;

スクリーンショット 2015-01-28 20.21.36

できましたね。

 

 

inner joinでは、テーブルの指定したフィールドの値が一致するデータだけを取得するという決まりがあります。

userテーブルのorganization_idと、organizationテーブルのidとでは、紐づくものが1と2しかありませんね。ですので、そのデータのみが抽出されます。

inner join

 

[PR] MySQLで挫折しない学習方法を動画で公開中

おわりに

このように、inner joinを使えば、テーブル同士を結合して合わせて抽出することができるので、必要に応じて使ってみてくださいね。

似たような記事として、MySQLでOUTER JOINを使って外部結合する方法もあるので、合わせてご覧ください。

 

大石ゆかり

organizationテーブルは、ユーザーが所属する会社といった感じですかね。内部結合って、どちらかのテーブルに値が無い場合は、表示されないんですねー。

田島悠介

その通り!内部結合は、どちらかに無いものは表示しないんだよね。

大石ゆかり

後、思ったんですが、そもそもテーブルを分ける必要ってあるんですか?ユーザーテーブルに、ユーザーの所属している会社のテーブル、似てますよね?1枚のテーブルにしちゃってもいいんじゃないんでしょうか?

田島悠介

いいね!実は全く持ってその通りなんだ。ただし、実際にPHPなどのプログラムから利用してみるとわかるんだけど、テーブルを分けないと、変更が面倒になったりするんだよね。分けることでデータの正確性も高まる場合もあるんだ。

 

MySQLを勉強していて、
・もっと効率的に勉強したい
・誰かに聞きながら学びたい
・自分でWebサービスを作りたい
と思ったことはないでしょうか?

そんな方のために、TechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

独学に限界を感じている場合はご検討ください。