关系1.course(cno,cname,credit)
对应课程代码,课程名称,学分,其中课程代码前2位代表不同类型的课程,如BT 代表 专业必修课,XZ 代表专业限选课。
1.统计 course表中学分数(credit)大于2的课程门数
select count(cno) from course where credit > 2
2.统计所有专业必修课(BT开头的课程代码)的学分总数
select sum(credit) from course where cno like 'BT%'
3.按课程类别统计每个类别课程的门数,如课程代码BT001,BT002都是专业必修课
- substring(待操作串,起始位置[从1开始],长度)
- left(待操作串,长度) --用这个也可以
- len(待操作串)
select substring(cno,1,2),count(cno) from course
group by substring(cno,1,2)
关系2.printer(model,color,type,price)
表示的含义是
model:打印机型号;
color:是否彩色, T 彩色,F 黑白
type:类型,ink-jet 表示喷墨, laser 表示激光;
price:单价
1.统计激光彩色打印机有多少种型号
- 不必分组,直接遍历+distinct
select count(distinct type) from printer
2.找出最便宜的喷墨打印机价格
select min(price) from printer where type = 'ink-jet'
3.找出最贵的激光打印机型号和价格
select model,price from printer
where price =
(select max(price) from printer)
关系3.product(maker,model,type)
maker:表示生产厂商
model:生产的产品型号
type:产品类型,有pc laptop两种
pc(model,speed,ram,hd,price)
表示型号,速度,内存大小,硬盘大小,价格
laptop(model,speed,ram,hd,screen,price)
表示型号,速度,内存大小,硬盘大小,屏幕大小和价格
本题可使用视图V_test(视图已经创建完成,可直接使用,不需要再次创建视图)
create view V_test as
select product.maker,product.model,product.type,pc.price,pc.hd,pc.speed from product join pc on product.model=pc.model
union
select product.maker,product.model,product.type,laptop.price,laptop.hd,laptop.speed from product join laptop on product.model=laptop.model
1.查询在一种或两种电脑(含PC和laptop)中出现过的硬盘的容量
- 注意题意即可
select hd from v_test group by hd having count(model)<3
2.统计各生产厂商生产的电脑(不区分pc和laptop)的平均处理速度的最大值
- 嵌套查询,临时表起别名
select max(AVGSPD) from
(select avg(speed) as AVGSPD
from V_test group by maker)
as AVGTable
3.统计出各厂商生产价格高于1000的产品数量,不用区分是pc还是laptop
select maker, count(*) from v_test
where price > 1000 group by maker
4分别统计各厂商生产的pc,laptop的平均价格
- 关注点:分组依据是两列属性组合形式
select maker,type, avg(price) from V_test
group by maker,type
练习点都是聚合函数的使用和简单的嵌套查询,个人练习做个记录