これら 2 つのリレーション (1 つは 5 行、もう 1 つは 3 行) で NATURAL JOIN を実行する方法を教えてください。
第1関係
A C
3 3
6 4
2 3
3 5
7 1
2次関係
B C D
5 1 6
1 5 8
4 3 9
これら 2 つのリレーション (1 つは 5 行、もう 1 つは 3 行) で NATURAL JOIN を実行する方法を教えてください。
第1関係
A C
3 3
6 4
2 3
3 5
7 1
2次関係
B C D
5 1 6
1 5 8
4 3 9
あなたの質問では、共通の属性 (つまり列) を持つ 2 つの別個のリレーションがあります: C.
自然結合は、共通の属性を持つ両方のリレーションのすべてのタプルを結合します。結果は次のようになります。
A B C D
7 5 1 6
3 4 3 9
2 4 3 9
3 1 5 8
これは、@Matthew が投稿したコードを使用して SQL で実行できます。
基本的に、CROSS JOIN を実行します。つまり、1 番目のリレーションのすべての行を 2 番目のリレーションのすべての行と結合します。次に、2 つの C 列があります。ここで、2 つの C が等しくないすべての行を削除し、それらを 1 つの列 C としてマージします。
何かのようなもの:
SELECT * FROM 1stRelation NATURAL JOIN 2ndReleation
同じことを行い、明示的な列名を使用して内部結合を行います。すなわち:
SELECT * from 1stRelation as x INNER JOIN 2ndRelation as z ON x.C=z.C
個人的には、事前にテーブル構造を認識していないが、結合できるはずであることがわかっている場合を除いて、それらを使用しないことを好みます。