SQLにおける結合とはテーブル同士をくっつけることをいいます。結合し、複数のテーブルのデータを集めたテーブルを作ることは多くのメリットがあります。今回はクロス結合について紹介します。
結合とは
employeesテーブル
| Id | name | department_id | |
| 1 | 山田 | 1 | yamada@example.com |
| 2 | 田中 | 2 | tanaka@example.com |
| 3 | 佐藤 | 3 | sato@example.com |
departmentsテーブル
| Id | name |
| 1 | 営業部 |
| 2 | マーケティング部 |
| 3 | 開発部 |
クロス結合
クロス結合はすべての組み合わせ作成するための構文です。
SQL
SELECT
カラム
FROM
テーブルa
CROSS JOIN
テーブルb下記の様に記載することでemployeesテーブルとdepartmentsテーブルをクロス結合することができます。
SQL
SELECT
*
FROM
employees
CROSS JOIN
departments抽出結果
SQL
1 山田 1 yamada@example.com
1 山田 2 yamada@example.com
1 山田 3 yamada@example.com
2 田中 1 tanaka@example.com
2 田中 2 tanaka@example.com
2 田中 3 tanaka@example.com
3 佐藤 1 sato@example.com
3 佐藤 2 sato@example.com
3 佐藤 3 sato@example.com上記の様にemployeesテーブルのデータ 1 つ 1 つに対してdepartmentsテーブルのデータを 1 つずつ結合したデータを取得することができます。
エンジニアからのアドバイス
クロス結合の用途は多くはありませんが、データを横向きから縦向きに変換させたい際に用いることがあります。他の結合との抽出されるデータの違いをしっかりと理解しましょう。
MySQLやPostgreSQLなど、一部のデータベースではCROSSにONを付与したSQL、INNSER JOINにONが無い文を書くことができます。CROSS構文も INNER構文も同じ結果になりますが、標準SQLではないので使わない方が良いでしょう。
