Relation Schema for Questions Revision
我有一个问题我正在进行修改,在account_branch关系中识别两个超级密钥和一个候选密钥。我有一个想法,但我需要验证,如果有人有建议,到目前为止,我有候选键是account_number,超级键是Account_number + branch_name,还有account_number +资产
另一个SQL命令问题:查找每个城市的名称以及城市中有超过3个分支的长凳数量,每个分支的资产超过1,000,000。我尝试使用GROUP BY和HAVING,这是正确的方法,遗憾的是我无法测试,因为这是笔和纸的所有理论
我的尝试答案是:
SELECT branch_city, COUNT(branch_city)
FROM branch
WHERE assets > 1000000
GROUP BY branch_city
HAVING COUNT(branch_city) > 3
答案 0 :(得分:0)
候选键是表中的一列或一组列,可以唯一地标识任何数据库记录而不引用任何其他数据(无额外列)
account_number是account_branch表中的主键,因此唯一标识表中没有任何无关列的行,所以这符合候选键的标准
超级键是列的组合,用于唯一标识关系数据库中的任何行(可能有唯一性不需要的额外列)
由于Account_number是account_branch表中的主键,而branch_name是分支表中的外键,Account_number + branch_name将唯一标识account_branch关系中的一行,因此它是超级键。由于Account_number + branch_name已经标识了一个唯一的行,因此从分支中添加任何其他列仍将标识唯一的记录,因此Account_number + branch_name + assets也是一个超级密钥。
SELECT branch_city, COUNT(branch_city)
FROM branch
WHERE assets > 1000000
GROUP BY branch_city
HAVING COUNT(branch_city) > 3
会返回您想要的结果集:
SELECT branch_city
FROM branch
WHERE assets > 1000000
从资产大于1000000的所有行的分支返回结果集
GROUP BY branch_city
告诉数据库将branch_city
的结果集分组添加聚合函数
COUNT(branch_city)
/聚合函数需要/
返回该结果集中每个城市的行数或出现次数
HAVING COUNT(branch_city) > 3
然后将结果集修剪为仅发生超过3次的城市