实验D02: 单表查询实验
一、实验名称和性质
二、实验目的
1.掌握数据的基本检索方法;
2.掌握数据查询的Group by和Order by子句的使用;
3.掌握聚集函数的使用方法。
三、实验的软硬件环境要求
硬件环境要求:
PC机(单机)
使用的软件名称、版本号以及模块:
Windows XP下的SQL Server 2000(或SQL Server 2005)
四、知识准备
前期要求掌握的知识:
数据检索的语句格式:
SELECT [ALL|DISTINCT] <目标列表达式列表>
FROM <表名或视图名列表>
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HA VING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ]
其中,SELECT后的目标列表达式可以是列名、表达式或函数。
GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。
HA VING短语:筛选出只有满足指定条件的组
ORDER BY子句:对查询结果表按指定列值的升序或降序排序
注意:T-SQL语句中关键字不区分大小写
五、实验内容
1.对数据表进行简单检索;
2.对数据表进行排序检索;
3.在检索中使用聚集函数;
六、验证性实验
先选择要操作的数据库,用T-SQL命令:
USE STUDENT
或在工具栏的当前数据库中选择STUDENT,
工作数据库
图2-1
以下查询要求在逐个语句执行,执行后将执行结果记录下来:
1.无条件查询全部数据
2.在SELECT关键字后指明要检索的列名
(1)查询S表的学生学号和姓名
(2)查询S表中的系部名
(3)查询S表中不重复的系部名
3.改变列标题的检索
(1)使用空格形式:列名新标题
(2)使用“AS”形式,列名 AS 新标题
(3)使用(列名/表达式)新标题形式
4.有条件选择的查询
(1)在S表检索“信息系”的学生信息
(2)在S表中检索姓“王”的学生信息
(3)在SC表检索’C01’选修课成绩为空的选课记录
(4)检索年龄为21,18,22的学生学号、姓名
Age IN {21,18,22}表示某条记录的AGE字段值是否是集合{21,18,22}中的元素,如是,则选择。它等价于下面语句:
5.使用聚集函数
(1)查询选课表中最高分、平均分、最低分
(2)查询“C01”课程的最高分、平均分和最小成绩。
6.对检索结果进行排序
7.进行分组统计:
(1)查询各学生的选课数
(2)使用HAVING 字句:“选课表”中查询选修了3 门以上课程的学生学号。
(3)“选课表”中按学号分组汇总学生的平均分,并按平均分的降序排列。
(4)析下面两个SELECT语句执行结果,说明有什么不同?
8.在ORDER BY字句后带COMPUTE 字句
(1)按学号对不及格的成绩记录进行汇总。
(2)按学号对不及格的成绩记录进行明细汇总(即根据排序结果进行分组汇总)
七、设计性实验
1.实验要求
(1)查询计算机系学生的学号和姓名。
Select sno,sname
From s
Where depa=’计算机系’
(2)查询选修了课程的学生学号。
Select sno
From sc
Where cno is not null
(3)查询选修C01 课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列。
Select sno,grade
From sc
Where cno=’c01’
Order by grade desc,sno
(4)查询每门课程的平均分。
Select
(5)查询学校开设的课程总数。
(6)查询选修两门及两门以上课程的学生学号。
(7)查询年龄在20-22之间的男生的学号、姓名、系部。
(8)查询选修‘C01’课程的学生人数。
2.实验报告要求
(1)写出验证性实验的执行结果
(2)用T-SQL完成设计性实验并写出执行结果
(3)完成以下思考题:
3.思考题
(1)使用ORDER BY子句后SELECT后的数据列有什么限制吗?使用GROUP BY 呢?
(2)执行select max(grade) from sc, 写出执行结果;执行 select sno, max(grade) from sc group by sno,写出执行结构。思考:使用GROUP BY<分组条件>子句后,语句中的统计函数的运行结
果有什么不同?