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

MySQLの結合(JOIN)とは?基本概念と4つの結合タイプを実例付きで解説

MySQLの結合(JOIN)とは

MySQLのSELECT文は、基本的に1つのテーブルから情報を取得するために使われます。しかし、実際のデータベース操作では、1つのテーブルだけでは答えられない問い合わせも数多く存在します。そのような場合、複数のテーブルに保存された情報を組み合わせて取得するために「結合(JOIN)」という操作を使用します。

結合の基本的な仕組み

MySQLの結合とは、2つ以上のテーブルに共通する列の値を基準にして、それらのテーブル同士のデータを関連付ける手法です。結合の結果として、新しい一時テーブルが生成されます。つまり、論理的に関連性のある複数のテーブルからレコードを取得し、1つの結果セットにまとめることができるのです。

この新しい一時テーブルは、結合対象となる2つのテーブルが共有している列(比較として意味を持つ列)に基づいて作成されます。

結合キーとは

結合で使用される共通の値は、通常、結合対象の両方のテーブルに同じ列名・同じデータ型で現れるものです。このような列は「結合キー」または「共通キー」と呼ばれます。

MySQLでサポートされる主な結合の種類

MySQLでは、主に以下の4種類の結合がサポートされています。

クロス結合(CROSS JOIN)

クロス結合は、結合の最も基本的な形です。2つのテーブルがある場合、テーブル1の各行に対してテーブル2のすべての行を順番に組み合わせます。したがって、テーブル1が3行、テーブル2が2行ある場合、クロス結合の結果は合計6行になります。

ここでは、次のようなデータを持つtbl_1とtbl_2という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)

以下のクエリを実行すると、上記の2つのテーブル間でCROSS JOINが実行され、すべての行の組み合わせが取得できます。

mysql> Select tbl_1.id, tbl_2.id FROM tbl_1 CROSS JOIN tbl_2;
+----+----+
| id | id |
+----+----+
| 1  | A  |
| 2  | A  |
| 3  | A  |
| 4  | A  |
| 1  | B  |
| 2  | B  |
| 3  | B  |
| 4  | B  |
| 1  | C  |
| 2  | C  |
| 3  | C  |
| 4  | C  |
| 1  | D  |
| 2  | D  |
| 3  | D  |
| 4  | D  |
+----+----+
16 rows in set (0.00 sec)

内部結合(INNER JOIN/等価結合)

内部結合を行うには、「結合述語」と呼ばれる特定の条件を指定する必要があります。内部結合(等価結合)では、結合される2つのテーブルの行が、指定した列で一致する値を持つことが求められます。

以下のクエリは、tbl_1とtbl_2をname列を基準に内部結合する例です。

mysql> SELECT tbl_1.id,tbl_2.id FROM tbl_1 INNER JOIN tbl_2 ON tbl_1.name = tbl_2.name;
+----+----+
| id | id |
+----+----+
| 4  | A  |
+----+----+
1 row in set (0.00 sec)

結果セットを見ると、tbl_1のid=4の行とtbl_2のid='A'の行が、name列で同じ値(Aarav)を持っているためマッチしていることがわかります。

左外部結合(LEFT JOIN)

左外部結合でも、内部結合と同様に結合述語が必要です。ただし、LEFT JOINで2つのテーブルを結合する際には「左テーブル」と「右テーブル」という概念が導入される点が異なります。LEFT JOINは、結合述語を満たす行だけでなく、満たさない行も含めて、左テーブルのすべての行を返します。結合述語に一致しない行については、結果セットの右テーブル側の列にNULLが表示されます。

以下のクエリは、tbl_1とtbl_2を使って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)

右外部結合(RIGHT JOIN)

RIGHT JOINは、LEFT JOINと似ていますが、左右のテーブルの扱いが逆になっています。RIGHT JOINでは、右テーブルのすべての行が結果セットに現れます。右テーブルの行のうち、左テーブルに一致する行がないものについては、左テーブル側の列にNULLが表示されます。

以下のクエリは、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)

まとめ

MySQLの結合を使いこなせるようになると、複数のテーブルに分散したデータを柔軟に組み合わせられるようになります。クロス結合・内部結合・左外部結合・右外部結合のそれぞれの特性を理解し、目的に応じて適切な結合タイプを選択することが、効率的なデータベース操作への第一歩です。

  1. MySQLがサポートするプラットフォーム一覧|対応OSとアーキテクチャを徹底解説

    MySQLは非常に多くのプラットフォームに対応したデータベース管理系统であり、仮想環境へのデプロイにも柔軟に対応できます。本記事では、MySQLが公式にサポートしているオペレーティングシステムと、それぞれの対応アーキテクチャ(CPUアーキテクチャ)について詳しく解説します。 Oracle Linux / Red Hat Enterprise Linux / CentOS エンタープライズ用途で広く採用されているRHEL系ディストリビューションでは、以下のバージョンがサポート対象です。 Oracle Linux 8 / Red Hat Enterprise Linux 8 / CentOS

  2. C#のリフレクションとは?実行時に型情報と属性を取得する方法を解説

    C#におけるリフレクション(Reflection)とは、プログラムの実行時に型(クラス・構造体・インターフェースなど)の情報を動的に取得・操作するための仕組みです。通常、コードはコンパイル時に型が確定しますが、リフレクションを使うことで、実行中にアセンブリやメタデータへアクセスし、クラスのメンバー(メソッド・プロパティ・フィールド)や属性(Attribute)の情報を調べることができます。System.Reflection名前空間実行中のプログラムのメタデータにアクセスするためのクラス群は、System.Reflection名前空間にまとめられています。この名前空間には、Type、Member