问题 单项选择题

已知一个关系数据库的模式如下:market(mno,mname,city)、item(ino,iname, type,color)、sales(mno,ino,price),其中,market表示商场,它的各属性依次为商场号、商场名和所在城市;item表示商品,它的各属性依次为商品号、商品名、商品类别和颜色; sales表示销售,它的各属性依次为商场号、商品号和售价。

查询长沙每个商场都销售,且售价均超过3000元的商品的商品号和商品名的SQL语句为:

SELECT ino, iname FROM item

WHERE (24)

(SELECT* FROM market

WHERE (25) AND NOT EXISTS

(SELECT*FROM sales

WHERE (26) AND price>3000))

查询在不同的商场中最高售价和最低售价之差超过100元的商品的商品号、其最高售价和最低售价的SQL语句为:

SELECT ino, MAX(price), MIN(price)FROM sales

(27) HAVING MAX(price)-MIN(price)>100

(27)处填()。

A.GROUP BY mno

B.GROUP BY ino

C.GROUP BY price

D.GROUP BY MAX(price)

答案

参考答案:B

解析:

(24)~(27)此题牵涉到select的多层嵌套查询。难度较高。有条件的读者可以在机器上调试此语句,这样有助于理解。第一问是查询长沙每个商场都销售,且售价均超过3000元的商品的商品号和商品名,其语义等价于——不存在这样的商场X:X所在城市为长沙,且X中不存在售价大于3000的在长沙各商场均有售的商品。言外之意就是,对于长沙各个商场而言,都有这样的商品——该商品在长沙各商场均有售且售价超过3000元。因此第 (24)空填NOT EXISTS,第(25)空填city=’长沙’。第(26)空显然要填:item. ino=sales. ino AND market. mno=sales.mno,用于连接三个表。

接下来我们看第(27)空,这一空要求查询不同商场中最高售价和最低售价之差超过 100元的商品的商品号,这需要对记录进行分组。分组时应以商品号来进行,因为若按商品号分组,则此商品在各个商场的售价都在一个组内,用MAX和MIN这两个函数,可以求得此商品的最高售价和最低售价,所以应选B。

填空题
问答题 案例分析题