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

MySQLのCROSS JOINとINNER JOINの違いとは?区別する方法をわかりやすく解説

MySQLにおけるCROSS JOINとINNER JOINの区別方法

MySQLにおいて、CROSS JOININNER JOINを区別できる要素は、実質的に「結合条件(join-predicate)」、すなわちクエリ内で指定される条件の有無だけです。INNER JOINのクエリを記述する際には、必ず結合条件を指定する必要があります。一方、CROSS JOINの場合は条件を指定せずにクエリを書きます。

この違いを理解するために、以下のようなデータを持つ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)

INNER JOINのクエリ例

まず、条件を指定したINNER JOINのクエリは次のように書けます。

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

このクエリでは、「tbl_1.name = tbl_2.name」という条件(ON句)によって、両テーブルで名前が一致する行のみが結合されます。その結果、1件の行だけが返されています。

条件を外すとCROSS JOINになる

ここで、上記のクエリから条件指定を取り除いてみましょう。すると、同じJOIN構文でも結果はCROSS JOIN(直積)と同じものになります。条件なしのクエリは以下の通りです。

mysql> Select tbl_1.id, tbl_2.id FROM tbl_1 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)

ご覧のとおり、tbl_1の各行がtbl_2のすべての行と組み合わされ、4行 × 4行 = 16行という結果が返されました。これが直積(デカルト積)です。

まとめ

  • INNER JOIN:ON句などの結合条件を指定し、条件に一致する行同士だけを結合する。
  • CROSS JOIN:結合条件を指定せず、片方のテーブルの全行ともう片方のテーブルの全行のすべての組み合わせを返す。

つまり、MySQLでは構文上「JOIN」というキーワードは共通ですが、条件を指定すればINNER JOIN、指定しなければCROSS JOINとして動作するという点が、両者を区別する唯一のポイントです。

  1. SQLの内部結合(INNER JOIN)と外部結合(OUTER JOIN)の違いを徹底解説

    SQLで複数のテーブルを扱う際に欠かせないのが「結合(JOIN)」です。結合には大きく分けて内部結合(INNER JOIN)と外部結合(OUTER JOIN)の2種類があり、それぞれ動作や用途が異なります。本記事では、両者の違いや構文、使い分けのポイントをわかりやすく解説します。 内部結合(INNER JOIN)とは 使用する句は「INNER JOIN」および「JOIN」です。 2つ以上のテーブルを結合し、結合条件に一致するタプル(行)のみを返します。 共通の属性(カラム)が存在しない場合、結果は空になります。 タプル数が多い場合、INNER JOINはOUTER JOINと比較して高速に

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

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