数据库SQL实验题目 下载本文

内容发布更新时间 : 2024/4/20 10:16:12星期一 下面是文章的全部内容请认真阅读。

教师授课表Teaching

Teacher 202 4 C04 Tno Tname Tsex Tbirthday Tdept 101 李新 男 1977-01-12 计算机系 102 钱军 女 1968-06-04 计算机系 201 王小花 女 1979-12-23 信息管理系 202 张小青 男 1968-08-25 信息管理系

二、完成下面查询

1.查询所有男生信息

2.查询年龄大于24岁的女生学号和姓名

3.查询所有教师的Tname、Tdept

4.查询“电子商务”专业的学生姓名、性别和出生日期

5.查询成绩低于90分的学生学号及课号,并按成绩降序排列 6.查询Student表中所有的系名 7.查询“C01”课程的开课学期

8.查询成绩在80分至90之间的学生学号及课号 9.统计有学生选修的课程门数

10.查询成绩为77,88或99的记录 11.计算“C02”课程的平均成绩 12.输出有成绩的学生学号

13.查询所有姓“刘”的学生信息 14.统计输出各系学生的人数

15.查询选修了“C03”课程和学生的学号及其成绩,查询结果按分数的降序排列 16.查询各个课程号及相应的选课人数,并为选课人数取别名为“人数”

17.统计每门课程的选课人数和最高分,并为选课人数和最高分分别取别名为“人

数”、“最高分” 18.统计每个学生的选课门数和考试总成绩,并为选课门数和总成绩分别取别名为

“门数”、“总成绩”,并按选课门数降序排列。

? 思考题

1.聚集函数能否直接使用在:SELECT子句、HAVING子句、WHERE子句、GROUP BY子句中?

2.关键字ALL和DISTINCT有什么不同的含义?

3.SELECT语句中用于表示模糊查询的通配符有几种?含义分别是什么?

4.利用BETWEEN…AND表示的数据范围能否用其他方法表示?怎样表示?如:score between 80 and 90 还可以怎么表示?

实验三 复杂查询

? 实验目的

1. 掌握连接查询和嵌套查询操作

2. 能灵活应用SELECT语句解决复杂的查询问题

? 实验内容和要求

一、连接查询

1. 查询女学生的学生学号及总成绩 2. 查询李勇同学所选的课程号及成绩 3. 查询李新老师所授课程的课程名称

4. 查询女教师所授课程的课程号及课程名称 5. 查询姓“王”的学生所学的课程名称

6. 查询选修“数据库”课程且成绩在80到90之间的学生学号及成绩 7. 查询选修“C02”课程的学生的平均年龄

8. 查询学习课程名为“数学”的学生学号和姓名

9. 查询“钱军”教师任课的课程号,选修其课程的学生的学号和成绩 10. 查询在第3学期所开课程的课程名称,选修其课程的学生学号和成绩

二、嵌套查询

1. 查询至少选修两门课程的男学生姓名 2. 查询与李勇同一个系的其他同学姓名

3. 查询学号比刘晨同学大,而年龄比他小的学生姓名 4. 查询年龄大于所有女同学的男同学的姓名及系别

5. 查询成绩比该课程平均成绩高的学生的学号、课程号及成绩 6. 查询不讲授“C01”课的教师姓名

7. 查询没有选修“C02”课程的学生学号及姓名

8. 查询选修了“数据库”课程的学生学号、姓名及系别 9. 查询选修了全部课程的学生姓名

10. 分别用子查询和连接查询,求“C02”号课程在80分以上的学生信息

? 思考题

1. 使用存在量词NOT EXISTS的嵌套查询时,何时外层查询的WHERE条件为真,何时为假?

2. DROP命令和DELETE命令的本质区别是什么?

实验四 数据更新、索引及视图操作

? 实验目的

1. 2. 3. 4. 5.

掌握利用INSERT命令实现对表数据的插入操作 掌握利用UPDATE命令实现对表数据的修改操作 掌握利用DELETE命令实现对表数据的删除操作 掌握索引的创建和使用 掌握视图的创建和删除

? 实验内容和要求

一、数据更新

1. 向Student表中插入记录('20050203','张静','女','1981-3-21','CS' ,'电子商务')

2. 插入学号为20050302,姓名为李四学生信息 3. 把男学生记录保存到表TS中

(提示:利用select into 命令可备份数据库中的表 格式:select * into 新表名 from 原表名 where 子句;)

4. 将学号为20050202的学生姓名改为张华,系别改为“CS”,专业改为“多媒体技术”

5. 将20050201学生选修“C03”号课程的成绩改为该课的平均成绩 6. 把女同学的成绩提高5%

7. 把选修了“数据库”课程学生的成绩全改为空值(NULL) 8. 删除学号为20050302的学生记录 9. 把“刘晨”同学的选课记录全部删除 10. 删除电子商务专业所有学生的选课记录 二、索引的创建与使用

1.用索引管理器创建SC表的索引IX_XS_KC。

(1)选择要创建索引的数据库文件夹,并在右边的对象窗口中选择并打开其中的“表”对象。 (2)选择所要创建索引的SC表,右键单击该表,在弹出的快捷菜单中选择“设计”命令,然后在工具栏中单击“管理索引和键”按钮,打开“索引和键”窗口。 (3)单击其中的“添加”按钮,创建新的索引,并为其设置相应的属性。

为SC表创建一个基于“课程号”列和“成绩”列的索引IX_XS_KC,其中课程号列按升序排列,成绩列按降序排列。 设置完成后,如图3所示。

图3 创建索引IX_XS_KC

2.强制使用刚才创建的索引查询数据。

在查询命令窗口中输入以下SQL查询命令并执行: SELECT SNO,CNO,DEGREE FROM SC

WITH (INDEX (IX_XS_KC)) WHERE DEGREE>=60

观察一下显示出来的数据是否有序。 3.利用SQL命令实现下列操作:

(1) 为Student表创建一个名为S_dept的索引,以系别排序

(2) 为Teacher表创建一个名为T_name的聚集索引,以Tname降序排序。

命令格式:create clustered index on 表名(列名1 顺序,列名2 顺序) (3) 删除S_dept索引 。

命令格式:drop index 表名.索引名 或 drop index 索引名 on 表名 三、视图的创建与使用

1. 创建一个简单视图view1,查询“计算机系”学生的信息 2. 创建一个简单视图view2,统计每门课程的选课人数和最高分

3. 创建一个复杂视图view3,查询与“张立”同学同一系别的学生信息 4. 删除视图View3

? 思考题

1.利用INSERT、UPDATE和DELETE命令可以同时对多个表操作吗? 2. 使用索引为什么能提高查询速度? 3.索引经常被建立在哪些字段上? 4.聚集索引与其他索引有什么不同?

实验五 存储过程、函数、触发器及游标操作

? 实验目的

1. 掌握compute by的使用 2. 掌握变量的定义和使用方法 3. 掌握存储过程的定义和执行方法 4. 掌握触发器的定义方法 5. 掌握函数的定义和调用方法 6. 掌握游标的定义和使用方法

(提示:以下操作全部基于实验一创建的Grademanager数据库)

? 实验内容和要求

一、 使用compute by完成下列操作

1. 显示所有学生的成绩,并汇总每个学生的总分。 2. 显示所有学生的信息,并汇总男女学生的人数。

二、 存储过程

1. 创建一个名为Query_student的存储过程,该存储过程的功能是根据学号查询学生表中某一学生的学号、姓名、性别及出生日期。执行存储过程Query_student,查询学号为“20050301”的学生的学号、姓名、性别及出生日期。写出完成此功能的SQL命令。 2. 创建存储过程sm_score,用于求指定学号(输入参数)的学生的总成绩(输出参数)。执行该存储过程,指定学号为“20050101 ”。

3. 创建并执行存储过程count_sno,用于求所有学生人数,通过参数返回学生人数。

4. 删除存储过程count_sno。

5. 创建一个向课程表中插入一门新课程的存储过程Insert_course,该存储过程需要两个参数,分别用来传递课程号、课程名;执行存储过程Insert_course,向课程表Course中插入一门新课程(’0807011’,’Flash动画设计’)。

6. 创建一个能向学生表中插入一条记录的存储过程Insert_student,执行存储过程Insert_student,向学生表中插入一个新同学('20060208','徐小花','女', '1987-08-25', 'IS','电子商务')。

三、 触发器

1. 在SC表创建一个INSERT触发器,如果插入一条选课信息时,学生的学号值在表S中不存在,则不执行插入操作,并提示用户。

2. 使用insert语句向SC表中插入记录('20020101', 'C01'), 观察触发器INSERT_SC是否被执行。

3. 在Teaching表中创建一个插入触发器insert_teaching,一旦发现待插入的