クロス結合

書式
SELECT * FROM テーブル1 CROSS JOIN テーブル2

MySQL ではクロス結合がサポートされています。
クロス結合とは、テーブル1の各行に、テーブル2のすべての行を結合して表示する方法です。
例えば、以下のような2つのテーブルがあったとします。

mysql> SELECT * FROM list_a;
+------------+---------+
| NAME       | TYPE_ID |
+------------+---------+
| MySQL      | 1       |
| Perl       | 2       |
| Oracle     | 1       |
| PHP        | 2       |
| C言語      | 3       |
| PostgreSQL | 1       |
| Java       | 3       |
| Ruby       | 2       |
+------------+---------+
8 rows in set (0.01 sec)

mysql> SELECT * FROM list_b;
+---------+--------------------+
| TYPE_ID | TYPE               |
+---------+--------------------+
| 1       | データベース       |
| 2       | インタプリタ型言語 |
| 3       | コンパイラ型言語   |
+---------+--------------------+
3 rows in set (0.00 sec)

この list_a というテーブルに list_b というテーブルをクロス結合すると、8行×3行の合計24行が結果として表示されます。

mysql> SELECT * FROM list_a CROSS JOIN list_b;
+------------+---------+---------+--------------------+
| NAME       | TYPE_ID | TYPE_ID | TYPE               |
+------------+---------+---------+--------------------+
| MySQL      | 1       | 1       | データベース       |
| Perl       | 2       | 1       | データベース       |
| Oracle     | 1       | 1       | データベース       |
| PHP        | 2       | 1       | データベース       |
| C言語      | 3       | 1       | データベース       |
| PostgreSQL | 1       | 1       | データベース       |
| Java       | 3       | 1       | データベース       |
| Ruby       | 2       | 1       | データベース       |
| MySQL      | 1       | 2       | インタプリタ型言語 |
| Perl       | 2       | 2       | インタプリタ型言語 |
| Oracle     | 1       | 2       | インタプリタ型言語 |
| PHP        | 2       | 2       | インタプリタ型言語 |
| C言語      | 3       | 2       | インタプリタ型言語 |
| PostgreSQL | 1       | 2       | インタプリタ型言語 |
| Java       | 3       | 2       | インタプリタ型言語 |
| Ruby       | 2       | 2       | インタプリタ型言語 |
| MySQL      | 1       | 3       | コンパイラ型言語   |
| Perl       | 2       | 3       | コンパイラ型言語   |
| Oracle     | 1       | 3       | コンパイラ型言語   |
| PHP        | 2       | 3       | コンパイラ型言語   |
| C言語      | 3       | 3       | コンパイラ型言語   |
| PostgreSQL | 1       | 3       | コンパイラ型言語   |
| Java       | 3       | 3       | コンパイラ型言語   |
| Ruby       | 2       | 3       | コンパイラ型言語   |
+------------+---------+---------+--------------------+
24 rows in set (0.00 sec)

このクロス結合はデカルト積と呼ばれることもあります。

カテゴリー一覧

結合