2017-10-03 14 views
-3

A自然結合Bを実行するとします。ここで、共有された主キーに自然結合が必要ですか?

Aのスキーマは、(aID)です。ここで、(aID)は主キーです。
Bのスキーマは(aID、bID)です。ここで(aID、bID)は複合主キーです。

この場合、自然結合を実行しますか?または、これが機能するには、AIDとbIDの両方を持つ必要がありますか?

+1

自然結合の*定義*とは何ですか?場合? PSあなたの質問に解説を編集してください。コメントは編集しないでください。あなたの質問が関係代数に関するものであれば、sqlではなくそのタグを使用してください。Googleの「リレーショナル代数オンライン」ですか? http://bis-uibk.github.io/relax/ – philipxy

答えて

-1

自然結合には両方が必要です。

よろしく、

テッド

+0

両方の関係に両方のaIDが1つだけあったが、一方が鍵であり、もう片方が鍵であったという新しいシナリオでは、助けてくれてありがとう。この場合、自然な結合作業はできませんか? – nikolas

+0

絶対にはい! –

+0

最初の例がうまくいかない理由は何ですか?自然に参加するだけで、少なくとも1つの一般的なコラムが必要です。 – nikolas

0

A "自然は" 参加のテーブル間で一致する列の名前を使用しています。キー定義に関係なく、一致する名前を使用します。それは同じ名前を持つ唯一の列であるため

したがって、

​​

は、AIdを使用します。

私の意見では、natural joinは忌み嫌われています。一つは、明示的にはを無視して、の外部キーの関係を無視します。これらは、名前に関係なく、「自然結合」キーです。

第2に、SELECTステートメントでは、結合キーがクリアされません。これにより、クエリのデバッグがはるかに難しくなります。

第三に、私は列を追加したり、テーブルから列を削除するSQL構文を考えることはできません作業クエリを取り、結果セットにの数を変更します。

さらに、テーブルに共通の列があることがよくあります。CreatedAtCreatedOnCreatedByです。これらの列が存在するだけで、自然な結合を使用できなくなります。

1

NATURAL JOINは、共通の入力テーブルの列名を1つずつコピーし、入力テーブルに固有の列名をそれぞれ1つずつコピーして返します。各入力テーブルの行を結合することによって作成できるすべての行を含むテーブルを返します。これは、ゼロを含む共通カラム名の数にかかわらずです。共通の列名がない場合、それはCROSS JOINとも呼ばれ、CARTESIAN JOINです。すべての列名が共通の場合、それはINTERSECTIONの一種です。このすべては、PKs、UNIQUE、FKs &他の制約に関係なくあります。

NATURAL JOINは、関係代数演算子として重要です。 In SQL it can be used in a certain style of relational programming that is in a certain sense simpler than usual.

本当の関係結果では、SELECT DISTINCTを使用します。また、関係には特別なNULL値はありませんが、SQL JOINではNULLをNULLと同じではないとみなします。したがって、NULLをちょうど別の値として扱うと、SQLは実際の関係結果を返さないことがあります。 (両方の引数がいくつかの共有列に対してNULLを持ち、両方が同じ他の共有列に対して同じ非NULL値を持つ場合)

関連する問題