Unsplashのmatin fardadが撮影した写真
JOIN系コマンドは1つのテーブルからだと足りない情報を他のテーブルから取得する際に使います。
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;
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系コマンドについては以上です。