2017/12/07
 
		本記事では、結合における分類であるクロス結合(直積・デカルト積・交差結合)について解説します。
sponsored link
クロス結合とは
クロス結合とは、結合するテーブル同士の全ての組み合わせのデータを取得する結合です。
基本的な使い方は以下になります。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | -- テーブル1 A   B --- - 001 a 002 b -- テーブル2 C   D --- - 001 z 003 w -- クロス結合(ORACLE仕様) SELECT t1.a       ,t1.b       ,t2.c       ,t2.d FROM   test_table1 t1       ,test_table2 t2 ; A   B C   D --- - --- - 001 a 001 z 001 a 003 w 002 b 001 z 002 b 003 w -- クロス結合(標準SQL規格(SQL99)) SELECT t1.a       ,t1.b       ,t2.c       ,t2.d FROM   test_table1 t1 CROSS JOIN test_table2 t2 ; A   B C   D --- - --- - 001 a 001 z 001 a 003 w 002 b 001 z 002 b 003 w | 
すべての結合の考え方の基本
クロス結合は、他の結合をイメージする際の基本となります。
例えば、条件が一致するデータを抽出する内部結合は、クロス結合した後に条件に一致するデータを抽出すると考えるとイメージしやすいのです。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | -- テーブル1 A   B --- - 001 a 002 b -- テーブル2 C   D --- - 001 z 003 w -- 内部結合 SELECT t1.a       ,t1.b       ,t2.c       ,t2.d FROM   test_table1 t1       ,test_table2 t2 WHERE t1.a = t2.c ; A   B C   D --- - --- - 001 a 001 z ← 条件一致(抽出対象) 001 a 003 w ← 条件不一致 002 b 001 z ← 条件不一致 002 b 003 w ← 条件不一致 | 
使い道
クロス結合は、実務で使用する場面はほとんどありません。
私自身も、レコード数が1行のテーブルのクロス結合(この場合、クロス結合と呼ぶのかは微妙ですが)以外では使用したことがありません。
ただ、パフォーマンステスト等のデータ増幅で利用することがあります。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | -- テーブル1(3件) A    B ---- - 0001 A 0002 B 0003 C -- テーブル2(10件) Z --- 00 01 ~ 09 -- データ増幅(データを増幅しテーブル3に登録) INSERT INTO test_table3 SELECT t2.z || SUBSTR(t1.a,3,2)       ,t1.b FROM   test_table1 t1       ,test_table2 t2 ; -- テーブル3(30件) A    B ---- - 0001 A 0002 B 0003 C 0101 A 0102 B 0103 C 0201 A ~ 0903 C | 
誤ってクロス結合になってしまうことに注意
意図せず結合条件の記述が漏れていたことにより、クロス結合になってしまうミスがあるので注意が必要です。
2テーブルの結合や結合する項目が1つであれば漏れることは稀でしょうが、結合するテーブルや項目が多い場合、記述漏れしてしまいやすいです。
まとめ
テーブル同士を結合の分類であるクロス結合について見てきました。
クロス結合は、直接的に業務で使用することは少ないですが、他の結合をイメージする際の基本となります。
他の結合と合わせて、しっかりと理解しておきましょう。
関連




 
					 
					 
					 
					 
					 
					 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						 
						










