问答题
【问题3】
如下的SQL语句是书店用于查询“所有订购了bid为‘123-456’图书的用户订购其他图书的情况”的不完整语句,请在空缺处填入正确的内容。
Select bid From orderlist A
Where not exists (Select * from Orders B
where A.ordemum=B.ordemum and B.cid {{U}}(3) {{/U}}
(Select cid from orderlist C,orders D
where {{U}}(4) {{/U}}.bid='123-456'
and {{U}}(5) {{/U}}=D.ordemum))
【正确答案】
【答案解析】(3) in
(4) C
(5) C.ordernum
[分析]
问题1考查E-R图与关系模式之间的转换。按照E-R向关系模式转换的原则,Books、Orders及Customers为3个关系模式,题中要求转换为4个模式,E-R图中有两个联系,显然不能都转换为关系。考虑到一个客户可以填写多张购书单,而一张购书单仅输入一个客户,所以联系 PlaceOrder不必单独作为一个关系模式,可将其合并到Customers中;而购书单和书(指种)之间是多对多联系,因此联系OrderList需要单独作为一个关系。因此,4个关系模式及其主键、外键如下:
Customers(cid,cname,address,camum),主键为cid。
Orders(ordemum,orderdate,cid),主键为ordernum,外键为cid。
Books(bid,title,author,qty_in_stock,year_punlished,price),主键为bid。
OrderList(bid,ordernum,qty,ship_date),主键为(bid,ordernum),外键为bid、ordemum。
问题2是用SQL创建关系,需要注意完整性约束。Customers关系中,cid是主键,因此空(1)应填PRIMARY KEY(cid)。cardnum列要求唯一,因此空(2)应填UNIQUE(cardnum)。
问题3是填充SQL查询语句。根据题意分析,最内层SQL语句是查找订购了bid为“123-456”的客户cid,而ordernum只出现在Orderlist和Orders中,因此易得空(5)应填 C.ordernum;bid是Orderlist关系的属性,故空(4)应填C。该SQL语句是为了查询这些用户还订购了哪些其他书,所以空(3)应填In。