MySQLのLEFT JOINとは?基本概念とクエリの書き方を実例で解説
LEFT JOINの基本概念
LEFT JOIN(左結合)を使って2つのテーブルを結合する場合、「左テーブル」と「右テーブル」という概念が登場し、あわせて結合条件(join-predicate)を指定する必要があります。
LEFT JOINは、左テーブルのすべての行を返します。これには、結合条件を満たす行だけでなく、条件を満たさない行も含まれます。
結合条件に一致しない行については、結果セットの右テーブル側のカラムにNULLが表示されるのが特徴です。
サンプルデータの準備
仕組みを理解するために、以下のデータを持つ2つのテーブル「tbl_1」と「tbl_2」を例に見ていきましょう。
mysql> Select * from tbl_1; +----+--------+ | Id | Name | +----+--------+ | 1 | Gaurav | | 2 | Rahul | | 3 | Raman | | 4 | Aarav | +----+--------+ 4 rows in set (0.00 sec) mysql> Select * from tbl_2; +----+---------+ | Id | Name | +----+---------+ | A | Aarav | | B | Mohan | | C | Jai | | D | Harshit | +----+---------+ 4 rows in set (0.00 sec)
ここでは、tbl_1が左テーブル、tbl_2が右テーブルとなります。
LEFT JOINクエリの実行例
LEFT JOINを使用したクエリは、以下のように記述します。
mysql> SELECT tbl_1.id, tbl_2.id FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.name = tbl_2.name; +----+------+ | id | id | +----+------+ | 1 | NULL | | 2 | NULL | | 3 | NULL | | 4 | A | +----+------+ 4 rows in set (0.02 sec)
結果の解説
この実行結果から、LEFT JOINの動作がよく分かります。
- tbl_1のすべての行(Id:1〜4)が結果に含まれています。
- Id:4の「Aarav」は、tbl_2にも同名の行が存在するため、tbl_2のId「A」が結合されています。
- Id:1〜3の「Gaurav」「Rahul」「Raman」は、tbl_2に一致する名前が存在しないため、右テーブル側のカラムがNULLになっています。
このように、LEFT JOINは右テーブルに一致するデータがなくても、左テーブルの行をすべて保持したい場合に非常に便利です。例えば、顧客一覧に対して注文履歴の有無に関わらず全顧客を表示したいケースなどでよく活用されます。
-
MySQLで複数行の値を一括更新し左パディング(LPAD)する方法
MySQLでは、LPAD()関数を使うことで、文字列の左側に指定した文字を埋めて(左パディング)、複数行の値をまとめて更新できます。この記事では、実際のテーブル作成からデータ更新までの手順をサンプル付きで解説します。1. サンプルテーブルの作成まず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable -> ( -> Number int -> );Query OK, 0 rows affected (2.26 sec)2. テストデータの挿入INSERTコマンドを使って、いくつかのレコードを挿入します。あえ
-
MySQLでカスタム変数を使ってテーブルを更新する方法【実例付き】
MySQLでは、ユーザー定義変数(カスタム変数)を活用することで、UPDATE文の実行時に値を動的に変化させながらレコードを更新できます。本記事では、実際のコード例を通じて、カスタム変数を使った更新クエリの書き方をわかりやすく解説します。1. サンプルテーブルの作成まず、動作確認用のテーブルを作成します。mysql> create table DemoTable2027 -> ( -> UserId int -> );Query OK, 0 rows affected (0.65 sec)2. テストデータの挿入次に、INSERT文を使ってサンプルデー