《数据库技术实验指导书.doc》由会员分享,可在线阅读,更多相关《数据库技术实验指导书.doc(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 数据库技术实验指导书(计算机通信工程学院)二 O O 八 年 四 月实验1 创建数据库和创建表一.实验目的:掌握创建数据库和定义表结构的方法。二.实验平台:Microsoft SQL_Server 2000的查询分析器三.实验内容:根据教材3.3的内容,用SQL语言完成下列操作。1. 创建一个教学数据库,数据库的名称为MIS;2. 创建MIS数据库中的5个关系模式,要求包含完整性约束的定义。 系(系编号,系名称) 教工(教工号,姓名,性别,职称,工资,系编号) 学生(学号,姓名,性别,出生年月,专业,家庭地址,系编号) 课程(课程编号,课程名称,学时,系编号)成绩(学号,课程编号,分数)四.
2、 SQL语句的参考脚本:在SQL Server中使用批处理和脚本两个术语。批处理是一个以“go”结束的SQL语句集,这些语句是作为一批执行并一起提交的。 “go”是SQL Server2000批处理的结束标志,不是SQL语句。create database 语句将创建一个数据库,在使用这个数据库时,还需要打开这个数据库,打开语句是use。下面这段SQL脚本程序存储在光盘的实验脚本子目录下,可以在查询分析器中打开这个文件,也可以直接将下面这段SQL脚本复制(粘贴)到查询分析器的编辑窗口。为了简化中文输入的烦琐操作过程,在实验脚本子目录下,还有一个全英文的脚本文件。/* 注释:实验一中文脚本.sq
3、l 创建数据库 */create database MISgo/* 打开数据库 */use MIS/* 创建5个表 */create table 系(系编号 smallint not null ,系名称 char(12),primary key (系编号)gocreate table 课程(课程编号 char(8) not null,课程名称 cname char(16),学时 smallint,系编号 smallint,primary key (课程编号),foreign key (系编号) references 系(系编号)gocreate table 教工(教工号 smallint,姓名
4、 char(8),性别 char(2),职称 char(10),工资 numeric(8,2),系编号 smallint, primary key (教工号),foreign key (系编号)references 系(系编号)gocreate table 学生(学号 char(6),姓名 char(8),性别 char(2),出生年月 datetime, 系编号 smallint, primary key (学号),foreign key (系编号) references 系(系编号)gocreate table 成绩(学号 char(6) not null, 课程编号 char(8) no
5、t null, 分数 numeric(4,1),primary key (学号 ,课程编号), foreign key (学号) references 学生(学号), foreign key (课程编号) references 课程(课程编号)go五. 实验过程1. 进入查询分析器,参见进入查询分析器演示。2. 在查询分析器的命令编辑窗口输入SQL语句,点击执行键,将执行SQL语句。参见执行SQL语句的演示。3. 在调试程序过程中,可以用鼠标选择某些要执行的SQL语句,再点击执行键,执行选择的语句。参见执行SQL语句的演示。4. 注意:当多个SQL语句执行时,可能出现的逻辑错误,即就单个语句来
6、说,语句没有错误,但多条语句顺序执行时可能出错。例如,上述5个表创建的顺序必须是“先父后子”,而删除的顺序则是“先子后父”。DROP TABLE 成绩DROP TABLE 学生DROP TABLE 教工DROP TABLE 课程DROP TABLE 系 5.保存调试通过的SQL程序。实验2 数据库的基本操作一.实验目的:掌握数据的插入、删除、修改、复制等方法。二.实验平台:Microsoft SQL_Server 2000的查询分析器三.实验内容:根据教材3.4的内容,用SQL语言完成下列操作。已创建的MIS数据库的5个表中,插入如下样本数据。系系编号系名称101数学102计算机103外语10
7、4经济教工教工号姓 名性别职称工 资系编号2101葛小平女教授3420.001012203李长江男副教授3190.001022405姜立伟男副教授3140.001042104张丽丽女讲师2243.001012302康立华女教授3740.001032205王伟平男讲师2130.00102课程课程号课程名学时系编号C101数学68101C102英语85103C103计算机102102C104经济学51104成绩学 号课程编号分数C10188C10267C10177C10295C10345C10487学生学 号姓 名性别出生年月系编号族别田平平女08/05/1980101汉郭黎明男03/04/198
8、1102汉何明慧女04/12/1982104回姜明明男12/05/1980101苗何漓江男10/05/1979103汉康纪平女03/04/1981102汉康嘉家男07/05/1980104汉2. 用SQL语言完成下列操作 (1)在系表中插入一行数据105,管理。(2)向教工表中插入一行数据2001,葛小平,女,教授,3420.00,102。(3)向教工表中插入一个教工号、姓名和工资,数据是2109,田新民,2650。(4)将教工表的姓名和工资拷贝到一个酬金表中。(5) 将教工表中职称为“教授”的工资增加15%。 (6) 将教工表中职称不是教授的人,工资增加10%。 (7) 从教工表中删除教工号
9、为2001的教工。(8) 删除酬金表的所有数据。(9) 删除酬金表。(10)在系表中添加一个电话号码属性,属性类型为CHAR(8)。 ALTER TABLE 系 ADD 电话号码 CHAR(8) (11)修改系表中电话号码属性的宽度为CHAR(13)。 ALTER TABLE 系 ALTER COLUMN 电话号码 CHAR(13)(12)删除系表中电话号码属性。 ALTER TABLE 系 DROP COLUMN 电话号码(13) 在学生表中删除何漓江同学的信息,包括他选课的信息。提示:先删除子表中的选课信息,再删除主表中的信息。思考:为什么必须这样做? 四. SQL语句的参考脚本:1. 在
10、5个表中插入数据(光盘实验脚本在5个表中插入数据实验脚本.sql)insert into 系 values(101,数学)insert into 系 values(102,计算机)insert into 系 values(103,外语)insert into 系 values(104,经济)goinsert into 系 values(101,数学)insert into 系 values(102,计算机)insert into 系 values(103,外语)insert into 系 values(104,经济)goinsert into 课程 values(c101,数学,68,101)
11、insert into 课程 values(c102,英语,85,103)insert into 课程 values(c103,计算机,102,102)insert into 课程 values(c104,经济学,51,104)goinsert into 课程 values(c101,数学,68,101)insert into 课程 values(c102,英语,85,103)insert into 课程 values(c103,计算机,102,102)insert into 课程 values(c104,经济学,51,104)goinsert into 教工 values(2101,葛小平,
12、女,教授,3420.00,101)insert into 教工 values(2203,李长江,男,副教授,3190.00,102)insert into 教工 values(2405,姜立伟,男,副教授,3140.00,104)insert into 教工 values(2104,张丽丽,女,讲师,2243.00,101)insert into 教工 values(2302,康立华,女,教授,3740.00,103)insert into 教工 values(2205,王伟平,男,讲师,2130.00,102)goinsert into 教工 values(2101,葛小平,女,教授,342
13、0.00,101)insert into 教工 values(2203,李长江,男,副教授,3190.00,102)insert into 教工 values(2405,姜立伟, 男,副教授,3140.00,104)insert into 教工 values(2104,张丽丽,女,讲师,2243.00,101)insert into 教工 values(2302,康立华,女,教授,3740.00,103)insert into 教工 values(2205,王伟平,男,讲师,2130.00,102)goinsert into 学生 values(,田平平,女,08/05/1980,101)in
14、sert into 学生 values( ,郭黎明,男,03/04/1981,102)insert into 学生 values( ,何明慧,女,04/12/1982,104)insert into 学生 values( ,姜明明,男,12/05/1980,101)insert into 学生 values( ,何漓江,男,10/05/1979,103)insert into 学生 values( ,康纪平,女,03/04/1981,102)insert into 学生 values( ,康嘉家,男,07/05/1980,104)insert into 学生 values( ,包立琪,女,03
15、/14/1981,101)insert into 学生 values( ,王海洋,男,04/13/1982,104)insert into 学生 values( ,王立平,女,12/05/1981,101)goinsert into 学生 values(,田平平,女,08/05/1980,101)insert into 学生 values( ,郭黎明,男,03/04/1981,102)insert into 学生 values( ,何明慧,女,04/12/1982,104)insert into 学生 values( ,姜明明,男,12/05/1980,101)insert into 学生 v
16、alues( ,何漓江,男,10/05/1979,103)insert into 学生 values( ,康纪平,女,03/04/1981,102)insert into 学生 values( ,康嘉家,男,07/05/1980,104)insert into 学生 values( ,包立琪,女,03/14/1981,101)insert into 学生 values( ,王海洋,男,04/13/1982,104)insert into 学生 values( ,王立平,女,12/05/1981,101)goinsert into 成绩 values(,c101,88)insert into 成
17、绩 values(,c102,67)insert into 成绩 values(,c101,77)insert into 成绩 values(,c102,95)insert into 成绩 values(,c103,45)insert into 成绩 values(,c104,87)insert into 成绩 values(,c102,78)insert into 成绩 values(,c103,67)insert into 成绩 values(,c101,66)insert into 成绩 values(,c102,89)insert into 成绩 values(,c102,93)ins
18、ert into 成绩 values(,c103,84)insert into 成绩 values(,c101,88)insert into 成绩 values(,c102,67)insert into 成绩 values(,c101,77)insert into 成绩 values(,c102,95)insert into 成绩 values(,c103,45)insert into 成绩 values(,c104,87)insert into 成绩 values(,c102,78)insert into 成绩 values(,c103,67)insert into 成绩 values(,c
19、101,66)insert into 成绩 values(,c102,89)insert into 成绩 values(,c102,93)insert into 成绩 values(,c103,84)2. 完成实验操作的SQL语言(光盘实验脚本数据库基本操作实验脚本.sql)-(1)在系表中插入一行数据105,管理。insert into 系 values (105,管理)insert into 系 values (105,管理)-(2)向教工表中插入一行数据2001,葛小平,女,教授,3420.00,102。insert into 教工 values (2001,葛小平,女,教授,3420.
20、00,102)insert into 教工 values (2001,葛小平,女,教授,3420.00,102)-(3)向教工表中插入一个教工号、姓名和工资,数据是2109,田新民,2650。insert into 教工(教工号,姓名,工资) values (2109,田新民,2650)insert into 教工(教工号,姓名,工资) values (2109,田新民,2650)-(4)将教工表的姓名和工资拷贝到一个酬金表中。-创建一个酬金表。create table 酬金 (教工姓名 char(8), 工资 numeric(8,2)-将教工表中姓名和工资两列数据拷贝到酬金表中。insert
21、 into 酬金 (教工姓名,工资)select 姓名,工资from 教工-(5) 将教工表中职称为“教授”的工资增加15%。 update 教工 set 工资=工资*1.15 where 职称=教授 update 教工 set 工资=工资*1.15 where 职称=教授-(6) 将教工表中职称不是教授的人,工资增加10%。 update 教工 set 工资=工资*1.1 where 职称 NOT LIKE 教授update 教工 set 工资=工资*1.1 where 职称NOT LIKE 教授-(7) 从教工表中删除教工号为2101的教工。delete from 教工 where 教工号
22、 = 2101delete from 教工 where 教工号 2101-(8) 删除酬金表的所有数据。delete from 酬金-(9) 删除酬金表。 drop table 酬金 -(10)在系表中添加一个电话号码属性,属性类型为char(8)。 alter table 系 add 电话号码 char(8) -(11)修改系表中电话号码属性的宽度为char(13)。 alter table 系 alter column 电话号码 char(13)-(12)删除系表中电话号码属性。 alter table 系 drop column 电话号码 -(13) 在学生表中删除学号为 的学生信息,包
23、括他选课的信息。delete from 成绩 where 学号 = delete from 学生 where 学号 = delete from 成绩 where 学号= delete from 学生 where 学号= 五. 实验过程5. 进入查询分析器,参见进入查询分析器演示。6. 在查询分析器的命令编辑窗口输入SQL语句,点击执行键 ,将执行SQL语句。参见执行SQL语句的演示。7. 在调试程序过程中,可以用鼠标选择某些要执行的SQL语句,再点击执行键,执行选择的语句。参见执行SQL语句的演示。4. 注意:在各个表中插入数据的顺序,首先在父表中插入数据,然后在子表中插入数据。另外,由于表的
24、定义中包含完整性约束的定义,所以,当主码重复,或者外码不是被参照表的有效值时,系统将拒绝插入的数据。 5.保存调试通过的SQL程序。实验3 数据库的查询操作一.实验目的:掌握数据的查询操作。二.实验平台:Microsoft SQL_Server 2000的查询分析器三.实验内容:根据教材3.5 -3.*的内容,用SQL语言完成下列操作。1. 简单查询操作(1)列出所有教授的姓名和工资:SELECT 姓名,工资FROM 教工WHERE 职称= 教授SELECT 姓名,工资FROM 教工WHERE 职称=教授(2)列出教授的所有信息。SELECT * FROM 教工WHERE 职称=教授SELEC
25、T * FROM 教工WHERE 职称=教授(3)列出教工表中的系编号并消除重复的元组。SELECT DISTINCT 系编号FROM 教工(4)已知学分=学时/17,计算每一门课程的学分数。SELECT 课程名称,学时/17 AS 学分FROM 课程SELECT 课程名,学时/17 AS 学分FROM 课程(5)显示教授的工资和提高10%的工资额。SELECT 姓名,工资,工资*1.1 AS 工资*1.1FROM 教工 WHERE 职称=教授(6)显示田平平同学出生100天的日期。显示田平平同学出生100天的日期。SELECT 姓名, 出生年月+100 AS 出生年月+100FROM 学生W
26、HERE 姓名=田平平(7)列出教工表中工资在3000元以上的名单。SELECT 姓名FROM 教工WHERE 工资= 3000(8)列出学生表中1980年1月1日之后出生的学生名单。 SELECT 姓名 FROM 学生 WHERE 出生年月= 1980-1-1(9)列出学生表中在1980年1月1日之后出生的男同学名单。 SELECT 姓名 FROM 学生 WHERE 出生年月= 1980-1-1 AND 性别=男(10)列出教工表中教授或副教授中工资低于3000元的名单。 SELECT 姓名 FROM 教工 WHERE (职称=教授 OR 职称=副教授)AND 工资3000(11)显示男学生
27、的姓名和所在的系名称。SELECT 姓名,系名称FROM 学生,系WHERE 学生.系编号=系.系编号 AND 性别=男或SELECT 姓名,系名称FROM 学生 R,系 SWHERE R.系编号=S.系编号 AND 性别=男(12)列出教工中比姜立伟工资低的姓名和工资。 SELECT R.姓名,R.工资FROM 教工 R, 教工 SWHERE R.工资=1000 AND 工资2(26)列出成绩表中分数在60以上、选课数大于2且平均分超过70的学号、选课数目和平均分。SELECT 学号,COUNT(课程编号 ), AVG (分数)FROM 成绩WHERE 分数=60GROUP BY 学号HAV
28、ING COUNT(课程编号)2 AND AVG(分数) 702. 用SQL语言完成下列操作 (1)在系表中插入一行数据105,管理。(2)向教工表中插入一行数据2001,葛小平,女,教授,3420.00,102。(3)向教工表中插入一个教工号、姓名和工资,数据是2109,田新民,2650。(4)将教工表的姓名和工资拷贝到一个酬金表中。(5) 将教工表中职称为“教授”的工资增加15%。 (6) 将教工表中职称不是教授的人,工资增加10%。 (7) 从教工表中删除教工号为2001的教工。(8) 删除酬金表的所有数据。(9) 删除酬金表。(10) 在学生表中删除何漓江同学的信息,包括他选课的信息。
29、提示:先删除子表中的选课信息,再删除主表中的信息。思考:为什么必须这样做? 四. SQL语句的参考脚本:2. 在5个表中插入数据的SQL语句insert into 系 values(101,数学)insert into 系 values(102,计算机)insert into 系 values(103,外语)insert into 系 values(104,经济)goinsert into 课程 values(c101,数学,68,101)insert into 课程 values(c102,英语,85,103)insert into 课程 values(c103,计算机,102,102)in
30、sert into 课程 values(c104,经济学,51,104)goinsert into 教工 values(2101,葛小平,女,教授,3420.00,101)insert into 教工 values(2203,李长江,男,副教授,3190.00,102)insert into 教工 values(2405,姜立伟, 男,副教授,3140.00,104)insert into 教工 values(2104,张丽丽,女,讲师,2243.00,101)insert into 教工 values(2302,康立华,女,教授,3740.00,103)insert into 教工 valu
31、es(2205,王伟平,男,讲师,2130.00,102)goinsert into 学生 values(,田平平,女,08/05/1980,101)insert into 学生 values( ,郭黎明,男,03/04/1981,102)insert into 学生 values( ,何明慧,女,04/12/1982,104)insert into 学生 values( ,姜明明,男,12/05/1980,101)insert into 学生 values( ,何漓江,男,10/05/1979,103)insert into 学生 values( ,康纪平,女,03/04/1981,102)
32、insert into 学生 values( ,康嘉家,男,07/05/1980,104)insert into 学生 values( ,包立琪,女,03/14/1981,101)insert into 学生 values( ,王海洋,男,04/13/1982,104)insert into 学生 values( ,王立平,女,12/05/1981,101)goinsert into 成绩 values(,c101,88)insert into 成绩 values(,c102,67)insert into 成绩 values(,c101,77)insert into 成绩 values(,c1
33、02,95)insert into 成绩 values(,c103,45)insert into 成绩 values(,c104,87)insert into 成绩 values(,c102,78)insert into 成绩 values(,c103,67)insert into 成绩 values(,c101,66)insert into 成绩 values(,c102,89)insert into 成绩 values(,c102,93)insert into 成绩 values(,c103,84)2. 完成实验操作的SQL语言(参见:-(1)在系表中插入一行数据105,管理。insert
34、 into 系 values (105,管理)-(2)向教工表中插入一行数据2001,葛小平,女,教授,3420.00,102。insert into 教工 values (2001,葛小平,女,教授,3420.00,102)-(3)向教工表中插入一个教工号、姓名和工资,数据是2109,田新民,2650。insert into 教工(教工号,姓名,工资) values (2109,田新民,2650)-(4)将教工表的姓名和工资拷贝到一个酬金表中。-创建一个酬金表。create table 酬金 (教工姓名 char(8), 工资 numeric(8,2)-将教工表中姓名和工资两列数据拷贝到酬金
35、表中。insert into 酬金 (教工姓名,工资)select 姓名,工资from 教工-(5) 将教工表中职称为“教授”的工资增加15%。 update 教工 set 工资=工资*1.15 where 职称=教授-(6) 将教工表中职称不是教授的人,工资增加10%。 update 教工 set 工资=工资*1.1 where 职称NOT LIKE 教授-(7) 从教工表中删除教工号为2101的教工。delete from 教工 where 教工号 2101-(8) 删除酬金表的所有数据。delete from 酬金-(9) 删除酬金表。 drop table 酬金 -(10) 在学生表中
36、删除学号为 的学生信息,包括他选课的信息。delete from 成绩 where 学号= delete from 学生 where 学号= 五. 实验过程8. 进入查询分析器,参见进入查询分析器演示。9. 在查询分析器的命令编辑窗口输入SQL语句,点击执行键 ,将执行SQL语句。参见执行SQL语句的演示。10. 在调试程序过程中,可以用鼠标选择某些要执行的SQL语句,再点击执行键,执行选择的语句。参见执行SQL语句的演示。4. 注意:在各个表中插入数据的顺序,首先在父表中插入数据,然后在子表中插入数据。另外,由于表的定义中包含完整性约束的定义,所以,当主码重复,或者外码不是被参照表的有效值时,系统将拒绝插入的数据。 5.保存调试通过的SQL程序。 实验4 复杂查询操作一.实验目的:掌握连接和嵌套查询操作。二.实验平台:Microsoft SQL_Server 2000的查询分析器三.实验内容:根据教材3.11-3.12的内容,用SQL语言完成下列操作。1. 打开MIS数据库,用SQL语言完成下列问题。(1)根据学生、课程和成绩表,输出“计算机”课程的成绩单,包括姓名和分数。(2)查询所开课程的选修情况,包括没有任何学生选修的课程。(3)从学生、课程和成绩表中,产生数据库课程的成绩单。3. 假设有贷款关系如图1所示。贷款帐号姓名