ふりぶろぐ
Web Engineer's Blog
MySQL

【MySQL】テーブル結合処理の違い【JOIN, LEFT JOIN, RIGHT JOIN】

SQLのテーブル結合にはいくつか種類があります。

なんとなく使っていたけど、どのようなものなのかあまり理解できていなかったので調べてみました。

JOIN, LEFT JOIN, RIGHT JOINの違いについてそれぞれ解説します。

やっぱり同じようで全然違いますね。

テーブル結合処理の違い

違いについてざっくりと解説します。

内部結合

JOINとINNER JOINは同意で、内部結合を意味します。

紐付いているレコードのみで新たなテーブルを表示します。

JOIN

SELECT * FROM table1 JOIN table2 ON table1.id = table2.table1_id

table1.id = table2.table1_idのもののみを表示します。

どちらかのテーブルのデータが存在しなかったり、NULLだったりした場合には表示されません

逆に、同じid(table1_id)の行が複数ある場合は、複製して表示します

外部結合

外部結合にはLEFT JOIN(左外部結合)とRIGHT JOIN(右外部結合)が存在します。

紐付いているレコード以外も含めて新たなテーブルを表示します。

LEFT JOIN

SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id

LEFT JOINということで左のテーブル(table1)はすべて表示されます。

もし、右のテーブル(table2)にデータが存在しなかった場合はNULLで表示されます。

左のテーブルを基準にしてデータを追加したい場合には便利そうですね。

RIGHT JOIN

SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.table1_id

RIGHT JOINはLEFT JOINの逆で、右のテーブル(table2)がすべて表示されます。

その他の仕様もLEFT JOINの逆になります。

まとめ

ざっくりと、それぞれの特徴についてまとめてみました。

今まではなんとなく使っていましたが、これからはしっかり考えた上で使えそうです。

LEFT JOINとRIGHT JOINの基本は同じなので、どちらかを覚えておけば大丈夫です。

パフォーマンスを意識するとテーブル結合は重要なので、しっかりと覚えておきたいですね。

ABOUT ME
りーふ
たまにブログを書いてるWebエンジニア。 サーバーサイドメインでインフラとフロントエンドもたまにやります。 Javaが得意。 Play Frameworkが好き。 本業は迷惑をかけない程度に手を抜くスタイル。 意識高い系は苦手。