| 【问题1】 填写下列SQL程序中的(1)~(6),使它们分别完成相应的功能。 程序1:查没有借阅过编号为111111图书的所有读者名单。
【正确答案】
【答案解析】NOT IN
(2)Rno
(3)COUNT(DISTINCT Rno)
(4)Bdate='2005-01-01'
(5)EXISTS
(6)Borrow. Bno=Books. Bno
[分析]
从给定的SQL的语句中可以看出,子查洵中是查询所有借阅过编号为111111图书的所有读者。而题目要求是查询“没有借阅过编号为111111图书的所有读者名单”,也就是从读者Readers关系中查询不在子查询中出现的那些读者。所以(1)空的答案是NOT IN。 SQL语句中是Readers关系中的Rno与子查询结果进行比较,所以(2)空的答案也应该是 Rno。
题目要求查询人数, 自然需要利用统计函数COUNT。因为2005年1月1日同一读者可能借多本书,也就是可能在Borrow关系中出现多次,所以需要加上DISTINCT表示不计重复值。因此,(3)空的答案是COUNT(DISTINCT Rno)。查询的条件自然是借阅时间是2005年1月1日,所以填空(4)的答案是Bdate='2005-01—01'。
程序3是要查“借书证号为123456的读者所借过的所有图书”,也就是从Books关系中查询出图书信息,这些图书被借书证号为123456的读者借阅的记录在Borrow关系中存在。因此(5)空的答案是EXISTS,表示存在。(6)空的答案是Borrow. Bno=Books. Bno。
问答题
【正确答案】
【答案解析】不能。表Borrow中,借书证号Rno、管理员工作证号Ano和图书书号Bno共同组成主码,因此不允许有两个在主码上完全相同的元组(行)存在,也就是不允许同一读者从同一管理员处多次借阅同一本书。
[分析]
主码是惟一识别表中记录的属性。在一个表中,不允许有两个在主码上完全相同的元组(行)存在。表Borrow中,借书证号Rno、管理员工作证号Ano和图书书号Bno共同组成主码,所以不允许由任意两行在这三个属性上的值都完全相同,也就是不允许同一读者从同一管理员处多次借阅同一本书。
|