🛠️

MySQLを使って「INNER JOIN」と「OUTER JOIN」実習

2023/09/29に公開

最初に

この記事はSQLの基本的なことは作成できるけど、「JOIN」はまだできない方とか忘れてもう一度見たい人が軽く見るといい記事です。内容は内部結合と外部結合の概念を見て、MySQLを使って「INNER JOIN」と「OUTER JOIN」を実習してみます。

目次

  • 内部結合とは?
  • 外部結合とは?
  • INNER JOIN
  • 3つ以上のテーブルを結合
  • 外部結合とは?
  • OUTER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • 3つ以上のテーブルを結合する
  • USINGを使った外部結合

内部結合とは?

内部結合は、指定したカラムの値が一致するデータのみを結合して取得する方法です。

「INNER JOIN」

テーブルを内部結合するには「INNER JOIN」を使います。

「INNER JOIN」は、「SELECT」などと組み合わせて使います。

以下のコマンドで、テーブル1とテーブル2を内部結合することができます。

ON のあとには、テーブル同士を結合するためのカラム名を指定します。

SELECT * FROM テーブル1の名前INNER JOIN テーブル2の名前 
ON テーブル1のカラム名 = テーブル2のカラム名;

‘persons’, ’items’ TABLE

それでは「persons」テーブルと「items」テーブルを内部結合してみます。

SELECT * FROM users INNER JOIN items ON users.item_id = items.id;

テーブルと「items」テーブルが結合して、すべてのカラムの値が表示。

SELECT *FROM persons INNER JOIN items ON persons.item_id = items.id;

ひとつのコマンド内に複数のテーブルが出てくるとき、カラム名を指定するときは、手前にテーブル名をつけて テーブル名.カラム名 という形で記述します。

「SELECT」のあとに続けて、表示したいカラム名を指定することもできます。

SELECT persons.item_id, items.name, items.price FROM persons 
INNER JOIN items ON persons.item_id = items.id;

3つ以上のテーブルを結合

3つ以上のテーブルを結合したい場合は、さらに後ろに「INNER JOIN」の文をつなげます。

SELECT * FROM users INNER JOIN items ON users.item_id = items.idINNER 
JOIN items2 ON users.item_id = items2.id;

‘items_photo’TABLE

「persons」テーブルと「items」テーブルと「items_photo」が結合され、
すべてのカラムの値が表示されています。

mysql> SELECT * FROM persons INNER JOIN items ON persons.item_id = items.id
    -> JOIN items_photo ON persons.item_id = items_photo.id;

「SELECT」のあとに続けて、表示したいカラム名を指定することもできます。

mysql> SELECT persons.name , persons.item_id , items.name , items_photo.photo
    -> FROM persons INNER JOIN items ON persons.item_id = items.id
    -> JOIN items_photo ON persons.item_id = items_photo.id;

外部結合とは?

外部結合は、指定したカラムの値が一致するデータを結合し、それに加えて元となるテーブルにしか存在しないデータも取得する方法です。

元となるテーブルは LEFT もしくは RIGHT で指定することができます。
テーブル1のカラム名 = テーブル2のカラム名;

「OUTER JOIN」

「OUTER JOIN」は、「SELECT」などと組み合わせて使います。

テーブル1とテーブル2を外部結合することができます。

ON のあとには、テーブル同士を結合するためのカラム名を指定します。

また、LEFT OUTER JOIN は LEFT JOINRIGHT OUTER JOIN は RIGHT JOIN と省略することがよくあります。

‘persons’, ’items’, ’items_photo’ TABLE

LEFT JOIN」

SELECT * FROM テーブル1の名前LEFT JOIN テーブル2の名前 ON テーブル1のカラム名 = テーブル2のカラム名;

「persons」テーブルと「items」テーブルを「LEFT JOIN」で結合してみます。

SELECT * FROM persons LEFT JOIN items ON persons.item_id = items.id;

「SELECT」のあとに続けて、表示したいカラム名を指定することもできます。

SELECT users.name, items.name, items.price FROM users LEFT JOIN items ON users.item_id = items.id;
SELECT persons.item_id ,persons.name , items.name FROM persons 
LEFT JOIN items ON persons.item_id = items.id;

RIGHT JOIN」

SELECT * FROM テーブル1の名前RIGHT JOIN テーブル2の名前 
ON テーブル1のカラム名 = テーブル2のカラム名;

「persons」テーブルと「items」テーブルを「RIGHT JOIN」で結合してみます。

SELECT * FROM persons RIGHT JOIN items ON persons.item_id = items.id;

「SELECT」のあとに続けて、以下のように表示したいカラム名を指定することもできます。

SELECT persons.name, items.name, items.price FROM persosns 
RIGHT JOIN items ON persons.item_id = items.id;

3つ以上のテーブルを結合する

3つ以上のテーブルを結合したい場合は、さらに後ろに「OUTER JOIN」の文をつなげます。

mysql> SELECT * FROM persons LEFT JOIN items ON persons.item_id = items.id
    -> LEFT JOIN items_photo ON persons.item_id = items_photo.id;

USINGを使った外部結合

「OUTER JOIN」を行う際に、テーブル同士を結合するための両テーブルのカラム名が同じ場合は、ON の代わりに USING を使うこともできます。

「items」テーブルと「items_photo」テーブルの「id」カラムを使って外部結合するコマンド例

SELECT * FROM items LEFT JOIN items_photo USING(id);

まとめ

「INNER JOIN」「OUTER JOIN」を見ました。難しい内容とおもいます。勉強しましょう。

  • 「INNER JOIN」コマンドでテーブルを内部結合することができる。
  • 「LEFT OUTER JOIN(LEFT JOIN)」や「RIGHT OUTER JOIN(RIGHT JOIN)」コマンドでテーブルを外部結合することができます。

Discussion