データベースを扱うときに、2つ以上のテーブルを結合(join)して まとめて結果を表示することができます。
ここでは MySQLでテーブルを結合(join)する方法を解説していきます。
テーブルの結合(join)とは?
テーブルを「結合する」とか「joinする」と言われていますが、まずは これをどういったときに用いるか解説してきます。
ショッピングサイトを例に考えてみましょう。
以下の2つのテーブルを用意してありました。
- 「users」テーブルには、ユーザーの名前と購入した商品IDが登録されています。
- 「items」テーブルには、商品IDと、その商品名、価格が登録されています。
ここからユーザーの名前と、そのユーザーが購入した商品名や価格をまとめて確認したいときはどうすればいいでしょう?
例えば「users」テーブルのデータを取得しただけでは、ユーザー名や商品IDはわかりますが、商品名や価格はわかりません。
商品IDをもとに、さらに「items」テーブルからデータを取得する必要があります。
テーブルの結合(join)を行えば、これらの独立した2つのテーブルをまとめて ひとつの行として取得することができるというわけです。
テーブル結合(join)の種類
テーブルの結合(join)の種類には「内部結合(INNER JOIN)」と「外部結合(OUTER JOIN)」があります。
以下から詳しく見ていきましょう。
内部結合(INNER JOIN)
内部結合(INNER JOIN)は、指定したカラムの値が一致するデータのみを結合して取得する方法です。
以下は商品IDを使って内部結合する例。
「users」テーブルと「items」テーブルの商品IDが一致しているデータが結合され、ひとつの行で取得できます。
このとき「users」テーブルにある商品IDが 5
(ユーザー名: 田中
)のデータは、「items」テーブルの商品IDカラムの値に存在しないので、結果には表示されません。
また同様にして、「items」テーブルにある商品IDが 1
(商品名: パン
)や 4
(商品名: 卵
)のデータは、「users」テーブルの商品IDカラムの値に存在しないので、結果には表示されません。
MySQLのコマンドで表すと、以下のようになります。
SELECT * FROM users INNER JOIN items ON users.商品ID = items.商品ID;
内部結合(INNER JOIN)の詳しい使い方はこちら。
外部結合(OUTER JOIN)
外部結合(OUTER JOIN)は、指定したカラムの値が一致するデータを結合し、それに加えて元となるテーブルにしか存在しないデータも取得する方法です。
元となるテーブルは LEFT
もしくは RIGHT
で指定することができます。
LEFT
を「users」テーブル、RIGHT
を「items」テーブルとした場合に、それぞれの取得結果例を以下から見ていきましょう。
LEFT OUTER JOIN
以下は商品IDを使って LEFT OUTER JOIN で外部結合する例。
「users」テーブルと「items」テーブルの商品IDが一致しているデータが結合され、それに加えて元となる「users」テーブルにしか存在しないデータも取得されます。
このとき「users」テーブルにあるデータは結果にすべて表示されます。ただし、商品IDが 5
(ユーザー名: 田中
)のデータは、「items」テーブルに対応するデータが存在しないので、商品名と価格のフィールドには何も表示されていません。
また「items」テーブルにある商品IDが 1
や 4
のデータは、「users」テーブルの商品IDカラムの値に存在しないので、結果には表示されません。
MySQLのコマンドで表すと、以下のようになります。
SELECT * FROM users LEFT OUTER JOIN items ON users.商品ID = items.商品ID;
外部結合(OUTER JOIN)の詳しい使い方はこちら。
RIGHT OUTER JOIN
以下は商品IDを使って RIGHT OUTER JOIN で外部結合する例。
「users」テーブルと「items」テーブルの商品IDが一致しているデータが結合され、それに加えて元となる「items」テーブルにしか存在しないデータも取得されます。
このとき「items」テーブルにあるデータは結果にすべて表示されます。ただし、商品IDが 1
(商品名: パン
)と 4
(商品名: 卵
)のデータは、「users」テーブルに対応するデータが存在しないので、ユーザー名のフィールドには何も表示されていません。
また「users」テーブルにある商品IDが 5
のデータは、「items」テーブルの商品IDカラムの値に存在しないので、結果には表示されません。
MySQLのコマンドで表すと、以下のようになります。
SELECT * FROM users RIGHT OUTER JOIN items ON users.商品ID = items.商品ID;
外部結合(OUTER JOIN)の詳しい使い方はこちら。
まとめ
以上、MySQLでテーブルを結合(join)する方法でした!
ここまでの内容をまとめておきます。
- テーブルの結合(join)は、独立した2つのテーブルをまとめて ひとつの行として取得したいときに行う。
- テーブルの結合(join)には、「内部結合(INNER JOIN)」と「外部結合(OUTER JOIN)」がある。
- 内部結合(INNER JOIN)は、指定したカラムの値が一致するデータのみを結合して取得するときに使う。
- 外部結合(OUTER JOIN)は、指定したカラムの値が一致するデータを結合し、それに加えて元となるテーブルにしか存在しないデータも取得するときに使う(元となるテーブルは
LEFT
もしくはRIGHT
で指定できる)。