「達人に学ぶSQL徹底指南書」(ミック著)を読んで(眺めて)「自己結合は使いこなせば非常に便利な技術です」とあった。そしてミックさんは本の中でも多用している。
自己結合ってなんか頭の中でこんがらがって難しい。
でも理解したら一段高いところに行けそう。だから理解してみようと努めるシリーズ。
自己結合では、同じテーブル同士を直積でくっつけることが多いみたい。なので、まずは直積とはなんぞや、から始めた。
自己結合、直積、クロスジョインという言葉がでてくる。
まずはいったん自己結合は忘れて直積、CROSS JOINについて調べてみた。
直積
ちょくせきと読むんだって
デカルト積、クロス結合とも言うんだって
各集合から一つずつ元と取り出して組にしたものを元として持つ新たな集合である。とウィキペディアにある。
つまり
テーブルA (氏名, 性別)
山田, 女
田中, 女
佐藤, 女
テーブルB (氏名, 性別)
高島, 男
加藤, 男
小林, 男
テーブルAとテーブルBの直積
山田, 女, 高島, 男
山田, 女, 加藤, 男
山田, 女, 小林, 男
田中, 女, 高島, 男
田中, 女, 加藤, 男
田中, 女, 小林, 男
佐藤, 女, 高島, 男
佐藤, 女, 加藤, 男
佐藤, 女, 小林, 男
婚活パーティーの組み合わせを全部考えた感じ・・・?
アクセスのSQLで書くには
SELECT テーブルA.氏名, テーブルA.性別, テーブルB.氏名, テーブルB.性別
FROM テーブルA, テーブルB
テーブルをINNER JOIN 等を入れずにカンマで区切ってつなげます。
ほかのデータベースではCROSS JOINと書くこともあるようですが、アクセスSQLではそのように書くとエラーになりました。
デザインビューではこのようになります。
テーブルとテーブルの間に結合線がないやつ。(たまに間違えて結合させるのを忘れてこのように設定してしまい、恐ろしい数のクエリの結果が出てくることがあるやつだ。。。)
同じくウィキペディアにトランプの例があった。
記号♦♥♧♠と1~13までの数字を直積(クロス結合)すると52枚のカードになる。
♦ ♥ ♧ ♠
1 1♦ 1♥ 1♧ 1♠
2 2♦ 2♥ 2♧ 2♠
以下続く
なんか私はこれを見て「クロス結合(クロスジョイン)」とも言われるイメージがつかめた。なんか → ↓ クロスしてる感じ。
クロスジョインはいいとして、デカルト積ってなんだ?デカルト?オカルト?
有名な数学者の名前らしい。ルネ・デカルト、フランスの哲学者・数学者とある。
我思う、ゆえに我あり
という言葉(命題らしい)が有名ですね。
意味は分からないけど。。。
シリーズ自己結合 続編はこちら
コメント