计算机与通信工程学院
实 验 报 告
(软件实验用)
课程名称  数据库原理与技术          实验项目名称    数据查询           年级   大三      班级   信计    学号       姓名
同组姓名                            实验日期                                  指导教师签字
一、实验目的: 熟悉和掌握对数据表中数据的查询操作和SQL命令的使用,学会灵活熟练地使用SQL 语句的各种形式;   二、实验内容: 1、简单查询操作 (1)列出所有教授的姓名和工资: SELECT 姓名,工资 FROM 教工 WHERE 职称= '教授' (2)列出教授的所有信息。 SELECT  *  FROM 教工 WHERE 职称='教授' (3)列出教工表中的系编号并消除重复的元组。 SELECT  DISTINCT  系编号 FROM  教工 (4)已知学分=学时/17,计算每一门课程的学分数。 SELECT 课程名称,学时/17  AS 学分 FROM  课程 (5)显示教授的工资和提高10%的工资额。  SELECT 姓名,工资,工资*1.1  AS  '工资*1.1'  FROM  教工 WHERE 职称='教授' (6)显示田平平同学出生100天的日期。 SELECT  姓名, 出生年月+100  AS  '出生年月+100' FROM   学生 WHERE  姓名='田平平' (7)列出教工表中工资在3000元以上的名单。 SELECT 姓名  FROM   教工  WHERE  工资>= 3000 (8)列出学生表中1980年1月1日之后出生的学生名单。          SELECT 姓名          FROM  学生          WHERE 出生年月>= '1980-1-1' (9)列出学生表中在1980年1月1日之后出生的男同学名单。
1
SELECT 姓名             FROM  学生             WHERE 出生年月>= '1980-1-1' AND 性别='男' (10)列出教工表中教授或副教授中工资低于3000元的名单。             SELECT 姓名             FROM  教工             WHERE (职称='教授' OR 职称='副教授')AND 工资<3000 (11)显示男学生的姓名和所在的系名称。 SELECT 姓名,系名称 FROM 学生,系 WHERE 学生.系编号=系.系编号 AND  性别='男' 或 SELECT 姓名,系名称 FROM 学生 R,系 S WHERE  R.系编号=S.系编号 AND 性别='男' (12)列出教工中比姜立伟工资低的姓名和工资。 SELECT  R.姓名,R.工资 FROM   教工 R, 教工 S WHERE  R.工资=1000  AND  工资<=2000 (15)按学号的升序,显示系编号等于101的学生信息: SELECT  * FROM    学生 WHERE  系编号=101 ORDER BY 学号 (16)求教工表中教授工资的平均值。  SELECT  AVG (工资) AS 平均工资 FROM  教工 WHERE 职称='教授'2
(17)求所有教工的工资总和。 SELECT  SUM (工资)  AS 工资总和  FROM  教工 (18)找出教工中最高工资和最低工资。 SELECT  MAX(工资),MIN(工资) FROM  教工 (19)显示学生中最早和最晚的出生日期。 SELECT  MIN (出生日期), MAX (出生日期)  FROM   学生 (20)查询学生的总人数。    SELECT  COUNT(*)AS 人数 FROM  学生 2、复杂查询 (21)如果要统计成绩表中所有选课的学生人数,即不管一名学生选了几门课程,都只计算一次 SELECT  COUNT (DISTINCT (学号)) AS 人数 FROM  成绩 (22)统计学生表中男生和女生的人数。 SELECT 性别, COUNT (*) FROM   学生  GROUP BY 性别 (23)统计成绩表中,每一门课程的平均成绩。 SELECT 课程编号,AVG (分数) FROM  成绩 GROUP BY 课程编号 (24)查询教工表中每一种职称的最高工资和最低工资。 SELECT 职称, MAX (工资), MIN (工资)  FROM  教工 GROUP BY 职称 (25)统计成绩表中选修人数超过2以上的课程编号和人数。    SELECT 课程编号,COUNT (*)  FROM  成绩 GROUP BY 课程编号 HAVING  COUNT(*)>2 (26)列出成绩表中分数在60以上、选课数大于2且平均分超过70的学号、选课数目和平均分。 SELECT 学号,COUNT(课程编号 ), AVG (分数) FROM 成绩
3
WHERE 分数>=60 GROUP BY 学号 HAVING COUNT(课程编号)>2 AND AVG(分数) >70 (27)统计“CS”系学生的人数; (28)统计各系学生的人数,结果按升序排列; (29)按系统计各系学生的平均年龄,结果按降序排列; (30)查询每门课程的课程名; (31)查询无先修课的课程的课程名和学时数; (32)统计无先修课的课程的学时总数; (33)统计每位学生选修课程的门数、学分及其平均成绩; (34)统计选修每门课程的学生人数及各门课程的平均成绩; (35)找出平均成绩在85分以上的学生,结果按系分组,并按平均成绩的升序排 列; (36)查询选修了“1”或“2”号课程的学生学号和姓名; (37)查询选修了“1”和“2”号课程的学生学号和姓名; (38)查询选修了课程名为“数据库系统”且成绩在60分以下的学生的学号、姓名和成绩; (39)查询每位学生选修了课程的学生信息(显示:学号,姓名,课程号,课程名,成绩); (40)查询没有选修课程的学生的基本信息; (41)查询选修了3门以上课程的学生学号; (42)查询选修课程成绩至少有一门在80分以上的学生学号; (43)查询选修课程成绩均在80分以上的学生学号; (44)查询选修课程平均成绩在80分以上的学生学号;   三、实验平台:  Microsoft SQL Sever  四、设计流程:  1、进入查询分析器,参见进入查询分析器演示。 在查询分析器的命令编辑窗口输入SQL语句,点击执行键 ►,将执行SQL语句。参见执行SQL语句的演示。 2、在调试程序过程中,可以用鼠标选择某些要执行的SQL语句,再点击执行键,执行选择的语句。参见执行SQL语句的演示。 3、 注意:在各个表中插入数据的顺序,首先在父表中插入数据,然后在子表中插入数据。另外,由于表的定义中包含完整性约束的定义,所以,
4
当主码重复,或者外码不是被参照表的有效值时,系统将拒绝插入的数据。 4、保存调试通过的SQL程序。   五、程序清单:          六、调试和测试结果:       七、教师评语与成绩评定:
5