2017-12-24 13 views
0

指定されたデータベース・スキーマ: [テーブルの主キーは太字で記載されている) アカウント(ACCOUNT_NO、BRANCH_NAME、バランス) 預金(CUSTOMER_NAME 、ACCOUNT_NUMBER){キーがここに述べられていなかった} 顧客(CUSTOMER_NAME、customer_street、customer_city)数(個別のdepositor.account_number)の使用が違いを生むだろう、ここ

ためのSQLクエリを記述するために必要な質問 - ハリソンに住んでいるし、少なくとも3つのアカウントを持っている顧客ごとに平均残高を探します。

私は次のSQLクエリを書いた:

select depositor.customer_name,avg(balance) 
from depositor,account,customer 
where depositor.account_number=account.account_number and 
      depositor.customer_name=customer.customer_name and 
      customer_city='Harrison' 
group by depositor.customer_name 
having count(depositor.account_number) >=3 

私の教科書のように、クエリの言及:

select depositor.customer_name,avg(balance) 
from depositor,account,customer 
where depositor.account_number=account.account_number and 
      depositor.customer_name=customer.customer_name and 
      customer_city='Harrison' 
group by depositor.customer_name 
having count(distinct depositor.account_number) >=3 

でしょうが、ここで明確な配置は、結果の変化につながりますか? 私の分析によると、結果の関係(預託者アカウントの顧客)のクロス積は customer_name account_numberというように候補キーを持つので、ここでは別の値は追加されません。

+2

あなたの教科書が 'FROM'節でカンマを使用していると、私は別のテキストブックを手に入れます。 –

+0

@GordonLinoff謝罪しますが、そうです。 Silberschatz、Korth、Sudarshanによるデータベースシステムコンセプトです。 –

+0

カンマは完全な外部結合を意味します。なぜなら、INNER結合のように動作させるためのWHERE条件があるからです。 – Vashi

答えて

1

それはdepositorテーブルには数にDISTINCTを追加すると、違いを作るべきではないことを意味customer_nameaccount_numberのユニークな組み合わせ、ということらしいです。

しかし、テーブルが同じaccount_numberのインスタンスを繰り返すファクトテーブルであった場合、同じアカウント番号を2回カウントしたくない場合は、違いがあります。

しかし、他の2つのテーブルにもそれぞれのフィールドの固有の組み合わせが含まれているように見えるので、違いはありません。

+0

ありがとう。タプルの複製が許されていたかどうかは、「別個」が違いを生じさせたと言うことですか? –

+0

はい。 'account_number'の' 111'、 '333'、' 111'のように3つのエントリを持つ顧客を想像してみてください。 'COUNT()'を使うと3つのアカウントが得られますが、 'COUNT(DISTINCT) 'を使うと2つのアカウントしか得られません。だから、 'COUNT(DISTINCT)'を使うと、それは除外されます。これは、 'account_number'のインスタンスを繰り返していたときだけです。 – Vashi

+0

しかし、預金者テーブルが重複したタプルを持つことが許された場合にのみ、そうであったでしょう。リレーショナルテーブルは別個のタプルを持つと仮定していますので、ここで違いはありません。 –

0

デポジッタテーブルにプライマリキー制約がないため、名前とアカウントのペアリングを複製することができます。あなたの教科書はコンポジットキーを議論していない可能性が高いので、このシナリオをキャッチする方法として意図されている可能性があります。残念ながら、余分な行は、3つのアカウントの資格が正しいにもかかわらず、平均計算を捨ててしまいます。

関連する問題