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つであれば漏れることは稀でしょうが、結合するテーブルや項目が多い場合、記述漏れしてしまいやすいです。
まとめ
テーブル同士を結合の分類であるクロス結合について見てきました。
クロス結合は、直接的に業務で使用することは少ないですが、他の結合をイメージする際の基本となります。
他の結合と合わせて、しっかりと理解しておきましょう。
関連