MySQLのCROSS JOINとINNER JOINの違いとは?区別する方法をわかりやすく解説
MySQLにおけるCROSS JOINとINNER JOINの区別方法
MySQLにおいて、CROSS JOINとINNER 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として動作するという点が、両者を区別する唯一のポイントです。
-
SQLの内部結合(INNER JOIN)と外部結合(OUTER JOIN)の違いを徹底解説
SQLで複数のテーブルを扱う際に欠かせないのが「結合(JOIN)」です。結合には大きく分けて内部結合(INNER JOIN)と外部結合(OUTER JOIN)の2種類があり、それぞれ動作や用途が異なります。本記事では、両者の違いや構文、使い分けのポイントをわかりやすく解説します。 内部結合(INNER JOIN)とは 使用する句は「INNER JOIN」および「JOIN」です。 2つ以上のテーブルを結合し、結合条件に一致するタプル(行)のみを返します。 共通の属性(カラム)が存在しない場合、結果は空になります。 タプル数が多い場合、INNER JOINはOUTER JOINと比較して高速に
-
PythonでMySQLを使って2つのテーブルを内部結合(INNER JOIN)する方法
SQLでは、共通のカラムや指定した条件に基づいて、2つのテーブルを結合(JOIN)することができます。テーブルを結合するためのJOINにはいくつかの種類が用意されています。本記事では、その中でも特に使用頻度の高い「内部結合(INNER JOIN)」について詳しく解説します。なお、JOINとINNER JOINはまったく同じ動作をします。INNER JOINは、片方のテーブルの各行をもう片方のテーブルのすべての行と照合し、共通のカラムを持つ行同士、あるいは指定された条件を満たす行同士を組み合わせて1つの結果セットを作成します。2つのテーブルを結合する際は、どの条件で結合するのかを必ず指定する必要