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

MySQLで【OUTER JOIN】を使って外部結合する方法を初心者向けに解説した記事です。内部結合と違い、外部結合では、どちらかのテーブルにしか存在しないデータについても取得することができます。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

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

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

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

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

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

 

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

 

内部結合と外部結合の違い

結合には、INNER JOINを使った内部結合もありますが、内部結合が、テーブルの指定したフィールドの値が一致するデータしか抽出しないのに対し、外部結合では、どちらかのテーブルにしか存在しないデータについても取得することができます。

詳しくは、実際にやりながら見ていきましょう。

 

大石ゆかり

前回、内部結合(inner join)でテーブルを2つ、つなげたんですけど、外部結合っていうのもあるんですか?

田島悠介

left outer join と right outer joinの2つがあるよ。

大石ゆかり

leftとrightはそれぞれ、左、右っていう意味ですよね?

田島悠介

その通り!前回の内部結合の時に使ったサンプルを利用して、今度は外部結合を書いてみよう!

 

OUTER 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
1時間でできる無料体験!

にしてみます。

 

 

[PR] プログラミング入門で挫折しない学習方法を動画で公開中

OUTER JOINの構文

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

 

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

from テーブル名1

left outer join テーブル名2

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

 

 

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

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

 

それからfrom結合の基準となるテーブル名を書き、left outer joinに続けてもう一方のテーブル名を書きます。left部分に当てはまるものは、ほかにもrightとfullがあり、それぞれ次のように使い分けます。

  • left outer join…最初のテーブル(テーブル1)にしか存在しないデータを取り出すとき
  • rigtht outer join…次のテーブル(テーブル2)にしか存在しないデータを取り出すとき
  • full outer join…どちらのテーブルにも(テーブル1、2)それぞれにしかないデータが存在するとき

 

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

 

実際に書くとこのようになります。

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

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

できましたね。

 

今回は、left outer joinでuserテーブルにしかない情報も取り出すよう指定しているので、yamadaさんからitoさんまでのデータが出力されています。しかし、organizationテーブルのidには、itoさんのorganization_idである4はありません。よって、nameはNULL(何もデータがないという意味)と表示されます。

left

 

反対に、right outer joinを使ってorganizationテーブルを基準とすると以下のようになります。

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

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

userテーブル側のusernameとemailがNULL表示になりました。

 

おわりに

外部結合は、内部結合と違い、こういったどちらかのテーブルにしかないデータについても取得することができますので、用途に応じて使い分けてみてくださいね。

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

 

大石ゆかり

left outer joinとright の違いは何でしょうか?

田島悠介

どのテーブルを基準とするかっていう違いかな。leftの場合は左だよね。

大石ゆかり

なるほど!内部結合の時と違って、どちらかのテーブルに無いものも表示されてますね!

田島悠介

テーブルを3~4枚joinするっていうのは、けっこう多いので基礎はしっかり覚えておきたいね!

 

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

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

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

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

独学に限界を感じたら…テックアカデミーに相談しよう

プログラミングを独学していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 独学に不安を抱えている方へ、現役エンジニア講師とマンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう 厳しい試験を通過した講師 があなたの相談に真摯に向き合います。

「ただ気になることを相談したい」
「漠然としているがプロの話を聞いてみたい」

こんな気持ちでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料で予約する