实验07 集合查询和统计查询

实验目的

使学生进一步掌握加深MDSQL语言中集合和统计查询语句的理解和运用。

实验要求

(1) 掌握数据查询中的分组方法;
(2) 掌握使用统计函数查询数据的方法;
(3) 掌握使用分组统计函数查询数据的方法;
(4) 掌握使用集合查询的方法;
(5) 掌握计算和分组计算查询方法。

实验内容

查询客户表中的男性总人数。

select count(*) 男性总人数
from 客户表 
where 性别='男'

通过购买记录查询客户总人数。

select count(distinct 客户编号) 客户总人数
from 购买记录表 

统计每个卖家所拥有的商品种类数。

select 卖家表.卖家编号,count(distinct 商品编号) 商品种类数
from 商品表 right join 卖家表 on (卖家表.卖家编号=商品表.卖家编号)
group by 卖家表.卖家编号

查询购买商品种类大于3的客户姓名及电话。

select 姓名,电话
from 客户表,购买记录表
where 购买记录表.客户编号=客户表.客户编号
group by 购买记录表.客户编号,姓名,电话
having count(distinct 购买记录表.商品编号)>3

统计店名为“晓晓之家”所卖商品的平均价格。

select avg(单价) 平均价格
from 卖家表,商品表
where 商品表.卖家编号=卖家表.卖家编号
and 店名='晓晓电脑之家'

找出折扣率最低的销售记录。

select *
from 购买记录表
where 折扣率 =
(select min(折扣率)
from 购买记录表)

统计每个客户购买商品的总数量以及节省的费用。

select 姓名,sum(数量) 购买商品数,sum(单价*数量*(100-折扣率)/100) 节省的费用
from 客户表,购买记录表,商品表
where 购买记录表.客户编号=客户表.客户编号
and 商品表.商品编号=购买记录表.商品编号
group by 姓名

统计各种型号(不同编号)打印机的销售总额。

select 名称,sum(数量*单价) 销售总额
from 商品表,购买记录表
where 商品表.商品编号=购买记录表.商品编号
and 名称 like '%打印机%'
group by 名称

找出销售额最高的店名。

select 店名,sum(数量*单价*折扣率/100) 销售总额
from 商品表,购买记录表,卖家表
where 商品表.商品编号=购买记录表.商品编号
and 商品表.卖家编号=卖家表.卖家编号
group by 店名
having sum(数量*单价*折扣率/100)>=all
(select sum(数量*单价*折扣率/100)
from 商品表,购买记录表
where 商品表.商品编号=购买记录表.商品编号
group by 商品编号)

通过集合查询方式统计购买记录中男性客户有几人,女性客户有几人。

select 性别,count(姓名) 人数
from 客户表,购买记录表
where  购买记录表.客户编号=客户表.客户编号
group by 性别
having 性别='女'
union
select 性别,count(姓名) 人数
from 客户表,购买记录表
where  购买记录表.客户编号=客户表.客户编号
group by 性别
having 性别='男'

查询既购买了“计算机”又购买了“打印机”的客户姓名。(通过集合查询实现)

 select 姓名
from 客户表,商品表,购买记录表
where 购买记录表.客户编号=客户表.客户编号
and 商品表.商品编号=购买记录表.商品编号
and 商品表.名称='计算机'
intersect
select 姓名
from 客户表,商品表,购买记录表
where 购买记录表.客户编号=客户表.客户编号
and 商品表.商品编号=购买记录表.商品编号
and 商品表.名称='打印机'

通过集合查询未购买过任一商品的客户信息。(用except操作符完成)

select *
from 客户表
except
select *
from 客户表
where 客户编号 in
(select 客户编号
from 购买记录表)

问题与思考

结合本实验,举例说明集合查询是否可以用其他方式的查询代替?

可以
可以用连接查询方式代替
比如教材例3-66

请简要说明where子句和having子句的不同之处?

Where作用在group by 和having语句之前,having对成组后的数据进行筛选。
分组时where对分组进行限定,不满足条件,不会参与分组。而having 对分组结果进行限定,不满足的结果不会显示到分组。
where不能跟聚合函数,having可以跟聚合函数。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、实验目的 1、掌握SQL Server查询分析器的使用方法,加深对SQL和Transact-SQL语言查询语句的理解。 2、熟练掌握数据查询的分组、统计、计算与集合查询方法。 二、实验环境: Microsoft Windows 2000操作系统,Microsoft SQL Server 2000数据库管理系统标准版或企业版。 三、实验内容、步骤、结果和实验过程出现的问题: 1>内容: 基于实验一建立的 “图书读者数据库”(Book_Reader_DB)和实验二输入的部分虚拟数据,在SQL Server 2000查询分析器的Transact-SQL语句输入区输入Transact-SQL语句,然后点击“查询”菜单的“执行”菜单项(或用F5快捷键),执行输入区的Transact-SQL语句。 1、集合查询实验 在“图书读者数据库”(Book_Reader_DB),用集合查询的方法完成下列查询任务: ① 查询计算机类和机械工业出版社出版的图书; ② 查询清华大学出版社出版的书与机械工业出版社出版的所有不相同的图书号与书名; ③ 查询清华大学出版社出版的书与环境类图书的交集; ④ 查询借阅过清华大学出版社出版的“数据结构” 图书和西安电子工业出版社出版的“操作系统”图书的读者号的并集; 2、统计查询实验 在“图书读者数据库”(Book_Reader_DB),用分组、统计与计算的方法完成下列查询任务: ① 查找这样的图书类别:要求类别最高的图书定价不低于全部按类别分组的图书平均定价的2倍; ② 求机械工业出版社出版的各类图书的平均定价,用Group by来实现; ③ 列出计算机类图书的书号、名称及价格,最后求出册数和总价格; ④ 列出计算机类图书的书号、名称及价格,并求出各出版社这类书的总价格,最后求出全部册数和总价格; ⑤ 查询订购图书最多的出版社及订购图书的数量; ⑥ 查询2000年以后购买的图书总册数; ⑦ 计算各类图书的总册数; ⑧ 查询每本图书的平均借阅次数;
基于实验一建立的 “图书读者数据库”(Book_Reader_DB)和实验二输入的部分虚拟数据,在SQL Server 2000查询分析器的Transact-SQL语句输入区输入Transact-SQL语句,然后点击“查询”菜单的“执行”菜单项(或用F5快捷键),执行输入区的Transact-SQL语句。 1、集合查询实验 在“图书读者数据库”(Book_Reader_DB),用集合查询的方法完成下列查询任务: ① 查询计算机类和机械工业出版社出版的图书; ② 查询清华大学出版社出版的书与机械工业出版社出版的所有不相同的图书号与书名; ③ 查询清华大学出版社出版的书与环境类图书的交集; ④ 查询借阅过清华大学出版社出版的“数据结构” 图书和西安电子工业出版社出版的“操作系统”图书的读者号的并集; 2、统计查询实验 在“图书读者数据库”(Book_Reader_DB),用分组、统计与计算的方法完成下列查询任务: ① 查找这样的图书类别:要求类别最高的图书定价不低于全部按类别分组的图书平均定价的2倍; ② 求机械工业出版社出版的各类图书的平均定价,用Group by来实现; ③ 列出计算机类图书的书号、名称及价格,最后求出册数和总价格; ④ 列出计算机类图书的书号、名称及价格,并求出各出版社这类书的总价格,最后求出全部册数和总价格; ⑤ 查询订购图书最多的出版社及订购图书的数量; ⑥ 查询2000年以后购买的图书总册数; ⑦ 计算各类图书的总册数; ⑧ 查询每本图书的平均借阅次数; 上述每项实验内容相应的实验步骤必须进行详细的记录,并将其整理后写在实验报告

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值