クロス結合
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)
このクロス結合はデカルト積と呼ばれることもあります。