MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで2つのテーブルをLEFT JOINで結合する方法

MySQLでは、LEFT JOINを使うことで、左側のテーブルの全レコードを保持しながら、右側のテーブルと条件に一致するデータを結合できます。一致するデータが存在しない場合、その列はNULLとして返されます。本記事では、外部キー制約で関連付けた2つのテーブルを実際に作成し、LEFT JOINで結合する手順をサンプルコード付きで解説します。

1. 親テーブル(ParentTable)の作成

まず、2つのテーブルを作成し、外部キー制約で関連付けます。最初のテーブル(親テーブル)を作成するクエリは以下の通りです。

mysql> create table ParentTable
-> (
-> UniqueId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName varchar(10)
-> );
Query OK, 0 rows affected (0.56 sec)

レコードの挿入

INSERTコマンドを使って、最初のテーブルにレコードを挿入します。

mysql> insert into ParentTable(EmployeeName) values('John');
Query OK, 1 row affected (0.15 sec)
mysql> insert into ParentTable(EmployeeName) values('Carol');
Query OK, 1 row affected (0.32 sec)
mysql> insert into ParentTable(EmployeeName) values('Sam');
Query OK, 1 row affected (0.18 sec)
mysql> insert into ParentTable(EmployeeName) values('Bob');
Query OK, 1 row affected (0.19 sec)

データの確認

SELECT文でテーブルの全レコードを表示します。

mysql> select *from ParentTable;

出力結果は以下の通りです。

+----------+--------------+
| UniqueId | EmployeeName |
+----------+--------------+
| 1 | John |
| 2 | Carol |
| 3 | Sam |
| 4 | Bob |
+----------+--------------+
4 rows in set (0.00 sec)

2. 子テーブル(ChildTable)の作成

次に、外部キー制約を設定した2つ目のテーブル(子テーブル)を作成します。外部キーにより、子テーブルのUniqueIdは親テーブルのUniqueIdと一致する必要があります。

mysql> create table ChildTable
-> (
-> UniqueId int NOT NULL PRIMARY KEY,
-> EmployeeAddress varchar(100),
-> CONSTRAINT fk_uniqueId FOREIGN KEY(UniqueId) references ParentTable(UniqueId)
-> );
Query OK, 0 rows affected (0.54 sec)

レコードの挿入

INSERTコマンドで2つ目のテーブルにレコードを挿入します。ここで注目したいのは、3番目のレコードでは住所を登録せず、UniqueIdのみを挿入している点です。このNULLデータが後のLEFT JOINの挙動を確認するポイントになります。

mysql> insert into ChildTable values(1,'15 West Shady Lane Starkville, MS 39759');
Query OK, 1 row affected (0.19 sec)
mysql> insert into ChildTable values(2,'72 West Rock Creek St. Oxford, MS 38655');
Query OK, 1 row affected (0.18 sec)
mysql> insert into ChildTable(UniqueId) values(3);
Query OK, 1 row affected (0.41 sec)
mysql> insert into ChildTable values(4,'119 North Sierra St. Marysville, OH 43040');
Query OK, 1 row affected (0.16 sec)

データの確認

SELECT文でテーブルの全レコードを表示します。

mysql> select *from ChildTable;

出力結果は以下の通りです。UniqueId 3の住所はNULLになっています。

+----------+-------------------------------------------+
| UniqueId | EmployeeAddress |
+----------+-------------------------------------------+
| 1 | 15 West Shady Lane Starkville, MS 39759 |
| 2 | 72 West Rock Creek St. Oxford, MS 38655 |
| 3 | NULL |
| 4 | 119 North Sierra St. Marysville, OH 43040 |
+----------+-------------------------------------------+
4 rows in set (0.00 sec)

3. LEFT JOINでテーブルを結合する

それでは、LEFT JOINを使って2つのテーブルを結合してみましょう。クエリは以下の通りです。

mysql> select
ParentTable.UniqueId,ParentTable.EmployeeName,ChildTable.EmployeeAddress from ParentTable left join
-> ChildTable on ParentTable.UniqueId=ChildTable.UniqueId;

出力結果は以下の通りです。

+----------+--------------+-------------------------------------------+
| UniqueId | EmployeeName | EmployeeAddress |
+----------+--------------+-------------------------------------------+
| 1 | John | 15 West Shady Lane Starkville, MS 39759 |
| 2 | Carol | 72 West Rock Creek St. Oxford, MS 38655 |
| 3 | Sam | NULL |
| 4 | Bob | 119 North Sierra St. Marysville, OH 43040 |
+----------+--------------+-------------------------------------------+
4 rows in set (0.00 sec)

LEFT JOINのポイント

この結果からわかるように、LEFT JOINでは左側のテーブル(ParentTable)の全レコードが必ず表示されます。UniqueId 3の「Sam」は子テーブル側に住所データが存在しませんが、レコード自体は結果に残り、該当するEmployeeAddressの列にはNULLが返されます。

もしINNER JOINを使用した場合は、一致するデータが存在しない「Sam」のレコードは結果から除外されます。この挙動の違いを理解しておくことで、目的に応じた適切な結合方法を選択できるようになります。

  1. PythonとMySQLで2つのテーブルをLEFT JOIN(左結合)する方法を徹底解説

    SQLでは、2つのテーブル間の共通の列や、指定した条件に基づいてテーブルを結合(JOIN)することができます。SQLには内部結合(INNER JOIN)、左外部結合(LEFT JOIN)、右外部結合(RIGHT JOIN)など、さまざまな種類のJOINが用意されており、目的に応じて使い分けることが重要です。本記事では、その中でも「LEFT JOIN(左結合)」について詳しく解説します。LEFT JOINとは?LEFT JOINを使用すると、最初に指定したテーブル(左側のテーブル)のすべてのレコードが必ず結果に含まれます。右側のテーブルからは、結合条件に一致するレコードのみが左側のレコードと紐付

  2. PythonでMySQLを使って2つのテーブルを内部結合(INNER JOIN)する方法

    SQLでは、共通のカラムや指定した条件に基づいて、2つのテーブルを結合(JOIN)することができます。テーブルを結合するためのJOINにはいくつかの種類が用意されています。本記事では、その中でも特に使用頻度の高い「内部結合(INNER JOIN)」について詳しく解説します。なお、JOINとINNER JOINはまったく同じ動作をします。INNER JOINは、片方のテーブルの各行をもう片方のテーブルのすべての行と照合し、共通のカラムを持つ行同士、あるいは指定された条件を満たす行同士を組み合わせて1つの結果セットを作成します。2つのテーブルを結合する際は、どの条件で結合するのかを必ず指定する必要