count(*)
引数として属性を持つとの違いを理解していません。
ここで例を示します。2つの関係があります。
project (id, name, number);
employee (ssn, name, surname);
working_on (employee_ssn, project_id);
employee_ssn
どの参照employee(ssn)
とproject_id
参照でproject(id)
。
主キー:project(id)
、、employee(ssn)
working_on(employee_ssn
、project_id
)。
次に、プロジェクトごとに、プロジェクトのID、名前、およびプロジェクトに取り組んでいる従業員の数を見つける必要があります。
正しい解決策(本にあります)は次のとおりです。
select id, name, count (*)
from working_on join project on id=project_id
group by name, id
このソリューションが有効である理由がわかりませんが、count (*)
すべてのタプルをカウントするべきではありませんか?なぜこの方法で、正確な数の従業員がそれに取り組んでいるのですか?
私は代わりにこのソリューションを書きました:
select id, name, count (employee_ssn)
from working_on join project on id=project_id
group by name, id
ソリューションは同等ですか?そして、一般的に、とを使用すると
違いがありますか?これらの2つの構文が異なる結果を生成する例を提供できますか?count (*)
count(attribute)