CROSS JOIN(交差結合)は、2つのテーブルを結合するためのクエリです。
CROSS JOINは、2つのテーブルを結合する際に、それらのテーブルの関係性を考慮せず、単純にそれらのテーブルのすべての組み合わせを生成します。
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からわかりやすくサンプルコード付きで解説します。
プログラマーやデータベースエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識。是非最後までご覧ください。
SQL文の基本ルール(大文字/小文字の区別、コメントの付与など)を始めに学んでおきたい方は以下の記事を先にご覧ください。
CROSS JOIN とは?
CROSS JOIN とは交差結合とも呼ばれ、2つのテーブルを結合する際にそれらのテーブルの関係性を考慮せず、単純にそれらのテーブルのすべての組み合わせを生成するSQLです。
上記の例でみても明らかなとおり、テーブルAとテーブルBにあるレコードのすべての組み合わせを単純に出力していることが見て取れます。
CROSS JOIN :構文ルール
SELECT (取得するカラム名) FROM (テーブル名1) CROSS JOIN (テーブル名2);
INNER JOIN / OUTER JOIN とは異なり、CROSS JOINを用いる際には結合条件を指定する必要はありません。単純に2つのテーブルの全てのレコードの組み合わせを行うのがCROSS JOINであるためです。
早速、CROSS JOINのサンプルを確認してみましょう。今回は以下のような2つのテーブルを用意します。
テーブル定義:参考(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 | 田中 | 英語 | +------+------+---------+ */
ご覧のように両方のテーブルに存在するすべてのレコードの組み合わせを取得することができました。
システムエンジニアを目指したい方は
システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。
正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。
システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。