表的基本信息
商品(编号,品名,进价,库存,售价,厂商编号)
顾客(卡号,姓名,电话,积分)
厂商(编号,厂址,名称、电话)
销售(顾客卡号,商品编号,数量,日期)
根据上面基本表的信息完成下列查询。
1 查询积分最高的顾客姓名
SELECT XM FROM GK WHERE JF=(SELECT MAX(JF) FROM GK)
SELECT XM FROM GK WHERE JF=(SELECT TOP 1 JF FROM GK ORDER BY jf DESC)
SELECT TOP 1 XM FROM GK ORDER BY jf DESC
可以采用第一种,直接选取最大的积分数值,然后在在顾客表里寻找姓名。
第二种,则是选取降序排列的第一行认为是最大值,然后寻找姓名。
顺着第二种的思路走,选择按照积分降序排列的第一行的姓名就是所需。
但当有多个人积分都是最大值(相等)情况,前两种会出现多组数据,第三种只会出现一条数据,使用时分情况使用
2 查询销售数量1000以上的商品的厂商电话。
SELECT DISTINCT DH FROM XS,SP,CS WHERE XS.SL>1000 AND XS.SPBH=SP.BH AND CS.BH=SP.CSBH
3 查询生产商品5种以上的厂商信息。
SELECT DISTINCT * FROM CS WHERE CS.BH=(SELECT SP.CSBH FROM SP GROUP BY SP.CSBH HAVING COUNT(*)>5)
4 查询没有顾客买的商品信息。
SELECT * FROM SP WHERE SP.BH NOT IN(SELECT SP.BH FROM SP,XS WHERE XS.SPBH=SP.BH)
SELECT SP.* FROM SP LEFT JOIN XS ON SP.BH=XS.SPBH WHERE XS.SPBH IS NULL
第一种是嵌套查询,即把子查询作为父查询的条件。通过销售表里空的商品编号,在商品表里查询到商品信息。这是相关子查询,在使用时会把外部查询压至内部查询。
第二种是组合查询,直接把两个表左外连接,取销售表空的元组。