2024.11.05
【MySQL】JOIN系(JOIN、LEFT JOIN、RIGHT JOIN)の違いと使い方

Unsplashmatin fardadが撮影した写真

JOIN系コマンドで何ができるのか

JOIN系コマンドは1つのテーブルからだと足りない情報を他のテーブルから取得する際に使います。

JOIN系コマンドは3種類

JOIN系コマンドは内部結合1種、外部結合2種の合計3種類あります。

JOIN内部結合
 ※正式にはINNER JOIN
LEFT JOIN外部結合
 ※正式にはLEFT OUTER JOIN
RIGHT JOIN外部結合
 ※正式にはRIGHT OUTER JOIN

※各コマンドの使い方のみ覚えておけば「内部結合」、「外部結合」という言葉は忘れて良いかと思います。

イメージで理解する

【INNER JOIN】
 結合できたレコードのみを取得する。

 

【LEFT JOIN】
 テーブルAから全レコードを取得し、そのレコードにテーブルBの情報(カラム)を追加する
  ※テーブルBに無い箇所は「NULL」が入ります。

 使い勝手が良いので、よく使われます。

 

【RIGHT JOIN】
 テーブルBから全レコードを取得し、そのレコードにテーブルAの情報(カラム)を追加する
  ※テーブルBに無い箇所は「NULL」が入ります

 

※「LEFT JOIN」と「RIGHT JOIN」は同じ操作ができるので、
 一般的に「LEFT JOIN」がよく使われ「RIGHT JOIN」はあまり使われません。

使い方

JOIN系のコマンドは以下のように使います。

SELECT * FROM テーブルA [JOIN系] テーブルB ON [結合条件];

結合条件は
 テーブルAの任意カラム = テーブルBの任意カラム
 で指定します。
 指定したカラムの値が一致したレコードが結合されます。

 

以下は各コマンドでのクエリの書き方です。

■INNER JOIN
SELECT * FROM テーブルA JOIN テーブルB ON テーブルA.カラム = テーブルB.カラム;

 例)SELECT * FROM users JOIN clubs ON users.club_id = clubs.id



■LEFT JOIN
SELECT * FROM テーブルA LEFT JOIN テーブルB ON テーブルA.カラム = テーブルB.カラム;

 例)SELECT * FROM users LEFT JOIN clubs ON users.club_id = clubs.id;



■RIGHT JOIN
 SELECT * FROM テーブルA RIGHT JOIN テーブルB ON テーブルA.カラム = テーブルB.カラム;

 例)SELECT * FROM users RIGHT JOIN clubs ON users.club_id = clubs.id;

 

 

テーブル名の短縮:AS句

JOIN系コマンドは同じテーブル名を最低2回書くので、
AS句を使ってテーブル名を省略することが良くあるので、補足します。

 

SELECT * FROM テーブルA AS [省略] LEFT JOIN テーブルB AS [省略] ON [省略].カラム = [省略].カラム;

 例)SELECT * FROM users as u LEFT JOIN clubs as c ON u.club_id = c.id;

 

 

JOIN系コマンドについては以上です。