【SQL】CROSS JOIN(交差結合)を3分でわかりやすく解説

Database

CROSS JOIN(交差結合)は、2つのテーブルを結合するためのクエリです。

CROSS JOINは、2つのテーブルを結合する際に、それらのテーブルの関係性を考慮せず、単純にそれらのテーブルのすべての組み合わせを生成します。

CROSS JOIN
SELECT * FROM TBL_A
  CROSS JOIN TBL_B;

/* 取得結果
+------+------+---------+
| ID   | Name | Subject |
+------+------+---------+
|    1 | 鈴木 | 英語    |
|    1 | 鈴木 | 数学    |
|    1 | 鈴木 | 国語    |
|    2 | 佐藤 | 英語    |
|    2 | 佐藤 | 数学    |
|    2 | 佐藤 | 国語    |
|    3 | 田中 | 英語    |
|    3 | 田中 | 数学    |
|    3 | 田中 | 国語    |
+------+------+---------+
*/

このページでは、CROSS JOINとは何か?CROSS JOINの使い道など、データベース初心者向けに1からわかりやすくサンプルコード付きで解説します。

このページで学べる内容
  • CROSS JOIN(交差結合)とは
  • CROSS JOIN の基本文法

プログラマーやデータベースエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識。是非最後までご覧ください。

スポンサーリンク

CROSS JOIN とは?

CROSS JOIN とは交差結合とも呼ばれ、2つのテーブルを結合する際にそれらのテーブルの関係性を考慮せず、単純にそれらのテーブルのすべての組み合わせを生成するSQLです。

CROSS JOIN

上記の例でみても明らかなとおり、テーブルAとテーブルBにあるレコードのすべての組み合わせを単純に出力していることが見て取れます。

CROSS JOIN では、結合するテーブルのレコード数がそれぞれn個、m個の場合、必ず結合後のレコード数は(n×m)個となります。

CROSS JOIN :構文ルール

SELECT (取得するカラム名) FROM (テーブル名1)
CROSS JOIN (テーブル名2);

INNER JOIN / OUTER JOIN とは異なり、CROSS JOINを用いる際には結合条件を指定する必要はありません。単純に2つのテーブルの全てのレコードの組み合わせを行うのがCROSS JOINであるためです。

早速、CROSS JOINのサンプルを確認してみましょう。今回は以下のような2つのテーブルを用意します。

CROSS JOIN わかりやすく

テーブル定義:参考(CREATE TABLE

-- テーブルA
CREATE TABLE TBL_A (
ID INT(3),
Name VARCHAR(50)
);

/*
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int(3)      | YES  |     | NULL    |       |
| Name  | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
*/

-- テーブルB
CREATE TABLE TBL_B (
Subject VARCHAR(10)
);

/*
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| Subject | varchar(10) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
*/

利用するレコード:参考(INSERT文

INSERT INTO TBL_A (ID,Name) VALUES (1,'鈴木');
INSERT INTO TBL_A (ID,Name) VALUES (2,'佐藤');
INSERT INTO TBL_A (ID,Name) VALUES (3,'田中');

-- TBL_A 登録結果確認
SELECT * FROM TBL_A;
+------+------+
| ID   | Name |
+------+------+
|    1 | 鈴木 |
|    2 | 佐藤 |
|    3 | 田中 |
+------+------+

INSERT INTO TBL_B (Subject) VALUES ('国語');
INSERT INTO TBL_B (Subject) VALUES ('数学');
INSERT INTO TBL_B (Subject) VALUES ('英語');

-- TBL_B 登録結果確認
SELECT * FROM TBL_B;
+---------+
| Subject |
+---------+
| 国語    |
| 数学    |
| 英語    |
+---------+

CROSS JOINは単純に2つのテーブルを組み合わせるだけなので、SQL自体は非常にシンプルです。

SELECT * FROM TBL_A
CROSS JOIN TBL_B;

/* 結果
+------+------+---------+
| ID   | Name | Subject |
+------+------+---------+
|    1 | 鈴木 | 国語    |
|    2 | 佐藤 | 国語    |
|    3 | 田中 | 国語    |
|    1 | 鈴木 | 数学    |
|    2 | 佐藤 | 数学    |
|    3 | 田中 | 数学    |
|    1 | 鈴木 | 英語    |
|    2 | 佐藤 | 英語    |
|    3 | 田中 | 英語    |
+------+------+---------+
*/

ご覧のように両方のテーブルに存在するすべてのレコードの組み合わせを取得することができました。

CROSS JOIN のまとめ
  • CROSS JOINは、2つのテーブルを結合する際にそれらのテーブルの関係性を考慮せず単純にそれらのテーブルのすべての組み合わせを取得するSQL。
SELECT * FROM TBL_A
CROSS JOIN TBL_B;

/* 結果
+------+------+---------+
| ID   | Name | Subject |
+------+------+---------+
|    1 | 鈴木 | 国語    |
|    2 | 佐藤 | 国語    |
|    3 | 田中 | 国語    |
|    1 | 鈴木 | 数学    |
|    2 | 佐藤 | 数学    |
|    3 | 田中 | 数学    |
|    1 | 鈴木 | 英語    |
|    2 | 佐藤 | 英語    |
|    3 | 田中 | 英語    |
+------+------+---------+
*/

システムエンジニアを目指したい方は

システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。

正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。

システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。

タイトルとURLをコピーしました