实验目的:
1. 熟练掌握SQL语言查询语句SELECT的基本语法;
2. 熟悉各种表达选择查询条件和展示结果目标列的 方式;
3. 理解分组的概念,熟练掌握使用GROUP BY子句进行分组查询;
4. 熟练使用ORDER BY子句对结果进行排序;
5. 理解和掌握各种聚集函数的功能和应用。
实验题目:
0.将s,p,j,spj导入数据
1.查询所有供应商的信息,用中文表头显示;
语句:select sno 供应商号,sname 供应商名,stat 状态,city 供应城市 from s082;
2.查询位于“北京”的名称包含“星”的供应商信息;
语句:select * from s082
where city='北京' and sname like '%星%'
3.查询供应商名中第二个字是“海"的供应商信息;
语句:select * from s082
where sname like '_海%'
4.查询零件名以“螺丝”开头的零件信息;
语句:select * from p082
where pname like '螺丝%'
5.查询名称含有“车”的工程项目信息;
语句:select * from j082
where jname like '%车%'
6.查询名称为“螺母” 、 “螺栓” 、 “螺丝刀”的零件信息;
语句:select * from p082
where pname in('螺 母','螺 栓','螺丝刀')
7.查询“S001”号供应商的供应情况;
语句:select * from spj082
where sno ='S001'
8.查询“P002”号零件的总供应量;
语句:select sum(qty) from spj082
where pno ='P002'
9.查询“P002”号零件供应量的最大、最小和平均值;
语句:select max(qty),min(qty),avg(qty) from spj082
where pno ='P002'
10.分组计算每个工程项目使用每种零件的供应量;
语句:select jno,pno, sum(qty) as sum_pqty from spj082
group by pno,jno
11.查询供应量在300以上的供应信息;
语句:select jno,pno, sum(qty) as sum_pqty from spj082
group by pno,jno
having sum(qty)>300
12.查询供应量最低的两个供应信息;
语句:select * from spj082
order by qty limit 2
13.查询供应量前三名的供应商的编号;
语句:select * from spj082
order by qty desc limit 3
语句:select sno from spj082
order by qty desc limit 3
14.分组统计每个供应商供应每种零件的供应量。
语句:select sno,pno,sum(qty) from spj082
group by sno,pno
小结:
在上一次实验后,这次实验明显操作更加的流程。通过本次实验,我学习到了查询功能丰富的用法,作为SQL语言中最为重要的关键词,它的功能不仅仅在于简单的投影查询功能。
本次基于SELECT还运用了“中文表头显示”使用别名,即直接在名字后面加空格后加上别名,关键词查询“where”,字符串匹配“like”,多个关键词查询“where...in...”,数据查询“=”,分组“group by”,选择时添加一列,根据某列排序“order by”,降序“desc”,限制选择某几个“limit”,比较大小条件“having”
其中在这个过程中,有一个我重复试验了多次仍然结果有误,就是如何查询最后一个字是丰的供应商名,在询问过老师之后,原来是因为,我使用的sno是char型,固定长度字符串,虽然这个字是文字的最后一个,但他不是字符串的最后一个,如果想通过,则使用变长字符,varchar即可。