统计查询和组合查询

表的基本信息

商品(编号,品名,进价,库存,售价,厂商编号)

顾客(卡号,姓名,电话,积分)

厂商(编号,厂址,名称、电话)

销售(顾客卡号,商品编号,数量,日期)

根据上面基本表的信息完成下列查询。

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

第一种是嵌套查询,即把子查询作为父查询的条件。通过销售表里空的商品编号,在商品表里查询到商品信息。这是相关子查询,在使用时会把外部查询压至内部查询。
第二种是组合查询,直接把两个表左外连接,取销售表空的元组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值