【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
テーブルの全レコードの組み合わせを結合し、表示しています。