问答题 【问题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。