已知一个关系数据库的模式如下: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。