MySQLのRIGHT JOINとは?書き方と実行結果をわかりやすく解説
MySQLのRIGHT JOINとは
RIGHT JOIN(右外部結合)は、LEFT JOINと非常によく似た結合方法ですが、テーブルの扱いが逆になっている点が大きな特徴です。RIGHT JOINを使用すると、右側のテーブル(ON句の後に指定したテーブル)のすべての行が必ず結果セットに表示されます。
右側のテーブルの行のうち、左側のテーブルに一致する行が存在しない場合、その行の左側テーブルに対応する列にはNULLが格納されて返されます。
基本構文
RIGHT JOINは以下のように記述します。
SELECT 列名
FROM 左テーブル
RIGHT JOIN 右テーブル
ON 結合条件;
動作確認用のサンプルデータ
ここでは、以下のようなデータを持つ2つのテーブル「tbl_1」と「tbl_2」を使って、RIGHT JOINの動作を確認してみましょう。
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にはIdが数値型、tbl_2にはIdが文字型というように、少し構成の異なる2つのテーブルを用意しました。共通しているのは「Name」列です。
RIGHT JOINクエリの実行例
それでは、「Name」列を結合条件として、tbl_1に対してtbl_2をRIGHT JOINするクエリを実行してみます。
mysql> SELECT tbl_1.id, tbl_2.id FROM tbl_1 RIGHT JOIN tbl_2 ON tbl_1.name = tbl_2.name;
+------+----+
| id | id |
+------+----+
| 4 | A |
| NULL | B |
| NULL | C |
| NULL | D |
+------+----+
4 rows in set (0.00 sec)
実行結果の解説
この結果から、RIGHT JOINの重要なポイントを読み取ることができます。
- 右側テーブルの全行が保持される: 結果セットには、tbl_2(右側のテーブル)の4行(A・B・C・D)がすべて表示されています。
- 一致しない行にはNULL: 「Aarav」だけが両テーブルに存在するため、tbl_1.id = 4 と正しくマッチしました。一方、「Mohan」「Jai」「Harshit」はtbl_1に該当する行がないため、tbl_1.id の値は NULL になっています。
つまり、LEFT JOINの左右を入れ替えたものがRIGHT JOINだと考えると理解しやすいでしょう。「基準となるテーブル(すべての行を残したいテーブル)」をFROM句ではなくJOIN句の後ろに置きたい場合や、SQLの読みやすさの都合上、右側のテーブルを優先したい場合にRIGHT JOINは有効です。なお、多くの場合はテーブルの並び順を変えてLEFT JOINで書き換えることも可能です。
-
単一のMySQLクエリで最大値と最小値を同時に取得する方法
MySQLでは、集計関数である MIN() と MAX() を1つのSELECT文に組み合わせることで、単一のクエリだけでカラムの最小値と最大値を同時に取得できます。この記事では、実際にテーブルを作成し、データを挿入してから、その取得方法を順を追って解説します。 サンプルテーブルの作成 まずは、2つのINT型カラムを持つテーブルを作成します。 mysql> create table DemoTable ( FirstValue int, SecondValue int ); Query OK, 0 rows affected (0.66 sec) テストデータの挿入
-
MySQLでカスタム変数を使ってテーブルを更新する方法【実例付き】
MySQLでは、ユーザー定義変数(カスタム変数)を活用することで、UPDATE文の実行時に値を動的に変化させながらレコードを更新できます。本記事では、実際のコード例を通じて、カスタム変数を使った更新クエリの書き方をわかりやすく解説します。1. サンプルテーブルの作成まず、動作確認用のテーブルを作成します。mysql> create table DemoTable2027 -> ( -> UserId int -> );Query OK, 0 rows affected (0.65 sec)2. テストデータの挿入次に、INSERT文を使ってサンプルデー