SQL语句练习记录

关系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

练习点都是聚合函数的使用和简单的嵌套查询,个人练习做个记录

你可能感兴趣的:(个人日记,sql,mysql,sqlserver,数据库)