技術コンテンツ

【MySQL】交差結合(CROSS JOIN) - テーブル結合

【MySQL】交差結合(CROSS JOIN) - テーブル結合

MySQLの交差結合について解説します。

検証環境

交差結合

交差結合は“複数テーブルを繋げて1つの表データを作成すること”です。

各テーブルの全レコードの組み合わせを結合します。

次のwriting_materialsテーブルとcolorsテーブルで具体例を示します。

/* writing_materials */
+---------------+-------+
| name          | price |
+---------------+-------+
| pencil        |   100 |
| ballpoint pen |   250 |
| brush pen     |   500 |
+---------------+-------+

/* colors */
+-------+---------+
| name  | code    |
+-------+---------+
| red   | #FF0000 |
| green | #00FF00 |
| blue  | #0000FF |
+-------+---------+

この2テーブルの交差結合の結果は次の表です。

+---------------+-------+-------+---------+
| name          | price | name  | code    |
+---------------+-------+-------+---------+
| brush pen     |   500 | red   | #FF0000 |
| ballpoint pen |   250 | red   | #FF0000 |
| pencil        |   100 | red   | #FF0000 |
| brush pen     |   500 | green | #00FF00 |
| ballpoint pen |   250 | green | #00FF00 |
| pencil        |   100 | green | #00FF00 |
| brush pen     |   500 | blue  | #0000FF |
| ballpoint pen |   250 | blue  | #0000FF |
| pencil        |   100 | blue  | #0000FF |
+---------------+-------+-------+---------+

全レコードの全ての組み合わせが結合されました。

CROSS JOIN

MySQLで交差結合を実現するにはCROSS JOIN句を使用します。

基本構文

SELECT 表示カラム FROM テーブルA CROSS JOIN テーブルB

CROSS JOIN句はSELECT文と合わせて使用します。

CROSS JOIN テーブルBの部分がCROSS JOIN句です。

サンプル

mysql> SELECT * FROM writing_materials;
+---------------+-------+
| name          | price |
+---------------+-------+
| pencil        |   100 |
| ballpoint pen |   250 |
| brush pen     |   500 |
+---------------+-------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM colors;
+-------+---------+
| name  | code    |
+-------+---------+
| red   | #FF0000 |
| green | #00FF00 |
| blue  | #0000FF |
+-------+---------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM writing_materials
    ___ih_hl_start
    -> CROSS JOIN colors;
    ___ih_hl_end
+---------------+-------+-------+---------+
| name          | price | name  | code    |
+---------------+-------+-------+---------+
| brush pen     |   500 | red   | #FF0000 |
| ballpoint pen |   250 | red   | #FF0000 |
| pencil        |   100 | red   | #FF0000 |
| brush pen     |   500 | green | #00FF00 |
| ballpoint pen |   250 | green | #00FF00 |
| pencil        |   100 | green | #00FF00 |
| brush pen     |   500 | blue  | #0000FF |
| ballpoint pen |   250 | blue  | #0000FF |
| pencil        |   100 | blue  | #0000FF |
+---------------+-------+-------+---------+
9 rows in set (0.00 sec)

22行目が交差結合(CROSS JOIN句)の部分です。

writing_materialsテーブルとcolorsテーブルの全レコードの組み合わせを結合し、表示しています。