SQL超级键和命令

时间:2017-01-04 00:44:26

标签: sql database-schema

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

1 个答案:

答案 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次的城市