C170 クロス結合

SQLにおける結合とはテーブル同士をくっつけることをいいます。結合し、複数のテーブルのデータを集めたテーブルを作ることは多くのメリットがあります。今回はクロス結合について紹介します。

結合とは

employeesテーブル

Idnamedepartment_idmail
1山田1yamada@example.com
2田中2tanaka@example.com
3佐藤3sato@example.com

departmentsテーブル

Idname
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ではないので使わない方が良いでしょう。

---