《数据库基础》实验报告
班级__计算机111__学号__xxxxxxxx__姓名__xxx___完成日期____6.20___
实验室 __理工楼310_ 指导老师xxx成绩____100______
实验
四、视图的创建及使用
(一)实验目的
(1)加深对视图的理解。
(2)掌握使用管理工具创建和使用视图的方法。
(3)掌握使用SQL创建和使用视图的方法。
(二)实验内容
(1)使用“图书借阅”数据库,在管理工具中创建视图“借阅_计算机图书”,包含借阅类别为“计算机”的图书的信息:(读者编号,姓名,书号,书名,借阅日期)。
(2)直接使用SQL定义(1)中要求的视图并对其进行查询。
(3)在管理工具中建立各类视图(如单表视图、多表视图、分组视图、基于视图的视图等)。
(4)尝试使用insert、update、delete更新视图。
(三)实验具体步骤
(1)使用“图书借阅”数据库,在管理工具中创建视图“借阅_计算机图书”,包含借阅类别为“计算机”的图书的信息(读者编号,姓名,书号,书名,借阅日期)。 create view 借阅_计算机图书(Duno,Duname,Shuno,Shuname,JYtime)
as
select Duzhe.Duno,Duname,Tushu.Shuno,Shuname, JYtime from Tushu,Duzhe,Jieyue where Duzhe.Duno=Jieyue.Duno and Tushu.Shuno,=Jieyue.Shuno and Liebie='计算机'
(2)直接使用SQL定义(1)中要求的视图并对其进行查询。
select * from 借阅_计算机图书
(3)在管理工具中建立各类视图
用管理工具建立:在管理工具中,打开图书借阅数据库,右击视图,新建视图,然后依照要求建立各种视图。
《数据库基础》实验报告
SQL语句:
create view 单表视图
as
select Shuname,Shuno,Zuozhe from Tushu
create view 多表视图
as
select Shuname,Shuno,Zuozhefrom Tushu,Jieyue
where Tushu.Shuno,=Jieyue.Shuno
create view 分组视图(Shuno,Duno)
as
select Shuno,Duno from Jieyue group by Shuno
create view 基于视图的视图
as
select Duno,Duname,Danwei from 单表视图 where Sex = '男'
(4)尝试使用insert、update、delete更新视图。
insert into 单表视图 values(002,'三星','绍兴文理','男',13456564751)
update 单表视图 set sex='男' where Duname='华为'
delete from 单表视图 where Shuno=1002
(四)实验心得
通过这次实验,对视图有了更深的认识,从视图的创建,插入,修改,查询以及删除都有了详细的认识。视图能够简化用户的操作,好好的学习课程,为以后的课程打下好基础!在实验的过程中也遇到一些问题,但是经过自己的理解以及请教同学把实验完成。
实验十报告 创建视图
实验目的
1.掌握创建视图的SQL语句的用法。
2.掌握使用企业管管理器创建视图的方法。 3.掌握使用创建视图向导创建视图的方法。 4.掌握查看视图的系统存储过程的用法。 5.掌握修改视图的方法。 一. 实验准备
1.了解创建视图方法。
2.了解修改视图的SQL语句的语法格式。 3.了解视图更名的系统存储过程的用法。 4.了解删除视图的SQL语句的用法。 二. 实验要求
1. 用不同的方法创建视图。
2. 提交实验报告,并验收实验结果。 三. 实验内容 1. 创建视图
(1) 使用企业管理器创建视图
① 在EDUC库中以“student”表为基础,建立一个名为“V_计算机系学生”的视图。在使用该视图时,将显示“student”表中的所有字段.
兰州大学数据库实验报告
视图如下:
(2) 使用SQL语句创建视图 ① 在查询分析器中建立一个每个学生的学号、姓名、选修的课名及成绩的视图S_C_GRADE; Create VIEW S_C_GRADE AS
SELECT student.sno,sname,cname,score FROM student,course,student_course WHERE student.sno=student_course.sno AND course.cno=student_course.cno;
视图如下:
②建立一个所有计算机系学生的学号、选修课程号以及平均成绩的视图COMPUTE_AVG_GRADE; Create VIEW COMPUTE_AVG_GRADE AS
SELECT student.sno,course.cno,AVG(score) '平均成绩' FROM student,course,student_course WHERE student.sno=student_course.sno
AND course.cno=student_course.cno AND student.dno='CS' GROUP BY student.sno,course.cno;
视图如下:
2. 修改视图
(1) 使用企业管理器修改视图
在企业管理器中将视图COMPUTE_AVG_GRADE中改成建立在数学系的学生学号、选修课程号以及平均成绩的视图。(IS设为数学系)
(2) 使用SQL语句修改视图
① 在查询分析器中使用更改视图的命令将上面建立的视图“V_计算机系学生”更名为“V_计算机系男生”。
SP_RENAME 'V_计算机系学生','V_计算机系男生';
3. 删除视图
(1) 使用企业管理器删除视图
用企业管理器删除视图“V_计算机系学生”
(2) 使用SQL语句删除视图
用SQL语句删除视图COMPUTE_AVG_GRADE; DROP VIEW COMPUTE_AVG_GRADE;
实验十一 使用视图
一. 实验目的
1. 熟悉和掌握对数据表中视图的查询操作和SQL命令的使用;
2. 熟悉和掌握对数据表中视图的更新操作和SQL命令的使用,并注意视图更新与基本表更新的区别与联系
3. 学习灵活熟练的进行视图的操作,认识视图的作用 二. 实验准备
1.熟悉SQL SERVER 工作环境。 2.能连接到EDUC数据库。
3.复习有关视图操作的SQL语言命令。 三. 实验要求
1. 在实验开始之前做好准备工作。
2. 实验之后提交实验报告,思考视图和基本表的区别 四. 实验内容 一. 定义视图
在EDUC数据库中,已Student Course 和Student_course 表为基础完成一下视图定义 1. 定义计算机系学生基本情况视图V_Computer;
CREATE VIEW V_Computer AS SELECT student.* FROM student WHERE student.dno='CS';
视图如下:
2. 将Student Course 和Student_course表中学生的学号,姓名,课程号,课程名,成
绩定义为视图V_S_C_G CREATE VIEW V_S_C_G AS SELECT student.sno,sname,course.cno,course.cname,score FROM student,course,student_course WHERE student.sno=student_course.sno course.cno=student_course.cno;
AND
视图如下:
3. 将各系学生人数,平均年龄定义为视图V_NUM_AVG CREATE VIEW V_NUM_AVG AS SELECT COUNT(dno) '各系人数',AVG(sage) '平均年龄' FROM student GROUP BY dno;
视图如下:
4. 定义一个反映学生出生年份的视图V_YEAR CREATE VIEW V_YEAR AS SELECT sname,2014-sage '出生年份' FROM student;
视图如下:
5. 将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G
CREATE VIEW V_AVG_S_G AS SELECT student.sno '学号',sname '姓名',COUNT(*) '选修门数',AVG(score) '平均成绩' FROM student,student_course WHERE student.sno=student_course.sno GROUP BY student.sno,sname;
视图如下:
6. 将各门课程的选修人数及平均成绩定义为视图V_AVG_C_G CREATE VIEW V_AVG_C_G AS SELECT cno '课程号',COUNT(cno) '选修人数',AVG(score) '平均成绩' FROM student_course GROUP BY cno;
视图如下:
二. 使用视图
1. 查询以上所建的视图结果。
所建视图结果如上题截图所示
2. 查询平均成绩为90分以上的学生学号、姓名和成绩;
SELECT 学号,姓名,平均成绩 FROM V_AVG_S_G WHERE 平均成绩>90;
3. 查询各课成绩均大于平均成绩的学生学号、姓名、课程和成绩;
SELECT V_S_C_G.sno,V_S_C_G.sname,V_S_C_G.cname,V_S_C_G.score FROM V_S_C_G,V_AVG_S_G WHERE V_S_C_G.sno=V_AVG_S_G.学号 AND V_S_C_G.score>V_AVG_S_G.平均成绩;
4. 按系统计各系平均成绩在80分以上的人数,结果按降序排列;
1.先创建学生学号-系别视图V_STUDENT CREATE VIEW V_STUDENT AS SELECT sno,dno FROM student; 2.进行查询
SELECT V_STUDENT.dno '系别',COUNT(V_STUDENT.sno) '人数' FROM V_STUDENT,V_AVG_S_G WHERE V_STUDENT.sno=V_AVG_S_G.学号 AND V_AVG_S_G.平均成绩>80 GROUP BY V_STUDENT.dno;
三. 修改视图 并查询结果; UPDATE V_IS SET sname='S1_MMM' WHERE SNO='32011'; UPDATE V_IS SET sname='S4_MMM' WHERE SNO='32014'; SELECT * FROM V_IS WHERE sno='32011' OR sno='32014'; 1. 通过视图V_IS,分别将学号为“S1”和“S4”的学生姓名更改为“S1_MMM”,”S4_MMM”
2. 通过视图V_IS,新增加一个学生记录 ('S12','YAN XI',19,'IS'),并查询结果
INSERT INTO V_IS(sno,sname,sex,dno,sage) VALUES('S12','YAN XI','女','IS','19') SELECT *
FROM V_IS
WHERE sno='S12';
3. 要通过视图V_AVG_S_G,将学号为“S1”的平均成绩改为90分,是否可以实现?并说明原因
答:不能实现,因为视图或函数'V_AVG_S_G' 包含聚合、DISTINCT 或GROUP BY 子句或者PIVOT 或UNPIVOT 运算符,所以无法进行更新。
UPDATE V_AVG_S_G SET 学号='32011' WHERE 平均成绩='90';
实验十二 更新语句
一. 实验目的
1. 熟悉使用UPDATE/INSERT/DELETE语句进行表操作; 2. 能将这些更新操作应用于实际操作中去; 二. 三. 实验准备 实验要求 1.了解这些更新语句的基本语法和用法; 1. 完成下面的实验内容,并提交实验报告; 2. 在实验报告中附上相应的代码; 四. 实验内容
1. 对于student表,将所有专业号为‘001’的,并且入学年份为2006的学生,或是专业号为‘003’,并且年龄小于20岁的学生的班级号改为‘001’。
UPDATE student SET classno='001'
WHERE (mno='001'AND YEAR(sctime)='2006')OR(mno='003'AND (year(getdate())-year(sdate))<20);
2. 对于student表,删掉所有年龄小于20岁,并且专业号为‘003’的学生的记录。
DELETE FROM student WHERE mno='003'AND (year(getdate())-year(sdate))<20
3. 对于student表,插入一条新记录,它的具体信息为,学号:20071100
11、姓名:张
三、性别:男、出生日期:1988080
8、院系编号:‘001’、专业编号: ‘001’、班级号:‘001’、入学时间:20070901。 INSERT INTO student(sno,sname,sex,sdate,dno,mno,classno,sctime) VALUES('2007110011','张三','男','1988-8-8','001','001','001','2007-9-1');
4. 对于student表,将入学时间最晚的学生和年龄最小的学生的联系方式去掉。
UPDATE student SET tel=null
WHERE sctime>=ALL(select sctime FROM student) OR year(sdate)>=ALL(select year(sdate) from student)
5. 对于student表,将平均年龄最小的一个院系的院系编号改为‘008’。
UPDATE student SET dno='008' where dno in( SELECT top 1 dno FROM student
GROUP BY dno
ORDER BY AVG(year(getdate())-year(sdate)) )
T-SQL编程
一、【实验目的】
1、掌握T_SQL编程的基本语法
2、常用函数的使用方法
二、【实验要求】
1、使用查询分析器练习T-SQL编程方法
2、练习函数的使用
三、【实验准备】
1、复习与本次实验内容相关知识
2、预习相关函数(请预查阅CONVERT、DATENAME、GFTDATE函数的用法)
四、【实验内容】
1、条件结构
自己编写一段程序判断一个年份(比如1900年)是否是闰年,是则显示1900年为闰年,否则显示1900年不是闰年.
DECLARE @year INT SELECT @year=2014 if @year%4=0 and @year%100<>0 print CONVERT(CHAR(4),@year)+'是闰年' else print CONVERT(CHAR(4),@year)+'不是闰年'
2、循环结构 (1)下面是计算1~100和的循环结构,执行之,体会循环结构程序,注意语句块标志BEGIN ... END
DECLARE @SUM INT,@I INT SELECT @I=1,@SUM=0 WHILE @I<=100 BEGIN SELECT @SUM=@SUM+@I SELECT @I=@I+1 END PRINT '1...100的和为:'+CONVERT(CHAR(4),@SUM)
(3) 编写一个程序用于计算10的阶乘
DECLARE @SUM INT,@I INT SELECT @I=1,@SUM=1 WHILE @I<=10 BEGIN SELECT @SUM=@SUM*@I SELECT @I=@I+1 END PRINT '阶乘!的结果为:'+CONVERT(CHAR(10),@SUM)
(4) 自己编制一个程序,要求其能打印出100内的素数(只能被其自身和1整除的数).--循环结构+条件结构
SELECT main.number FROM master..spt_values AS main WHERE type='P'
AND number BETWEEN 3 AND 100 AND NOT EXISTS ( SELECT 1 FROM master..spt_values AS sub WHERE
type='P'
AND sub.number BETWEEN 2 AND main.number - 1 AND main.number % sub.number = 0)
3、CASE结构
(1)下面SQL查询图书的信息,并根据图书定价判断是否适合作为教材
select 书名, 出版社, 作者, case
when 定价>50 then '定价太高,不适合作教材'
else '定价' + CAST(定价 as varchar(5)) + ',可以作教材'
end 可否作为教材 from 图书
(2) 请自己编程实现各位同学的成绩以等级分显示即:90分及以上为优,80分及以上到90以下为良,70分及以上到80分以下为中,60分及以上到70分以下为及格,其余为不及格. SELECT student.sno ,sname ,cname, CASE WHEN student_course.score >=90 THEN '优' when student_course.score>=80 and student_course.score <=90 THEN '良'
when student_course.score>=70 and student_course.score <=80 THEN '中'
when student_course.score>=60 and student_course.score<=70 THEN '及格'
else '不及格' END GRADE FROM student_course,course,student WHERE student_course.cno=course.cno AND student_course.sno=student.sno
4、函数使用
下面查询,显示当前日期,显示格式为:"今天是XXXX年XX月XX日,星期X",执行之,体会系统函数的用法.
SELECT '今天是'+DATENAME(YEAR,GETDATE())+'年' +DATENAME(MONTH,GETDATE())+'月' +DATENAME(DAY,GETDATE())+'日,' +DATENAME(WEEKDAY,GETDATE())
实验四使用SQL语句修改SQL Server数据库
1、实验目的:
(1) 了解SQL Server数据库的逻辑结构和物理结构;
(2) 掌握使用SQL语句修改数据库的方法;
2、实验准备:
(1)要明确能够修改数据库的用户必须是系统管理员,或者是被授权使用CREATE DATABASE语句的用户;
(2)修改数据库必须要明确:除存储位置,即物理文件名不能修改外,其它项均可以修改,包括数据库名、数据库大小和增长量等数据;
(3)了解使用SQL语句修改数据库的方法。
3、实验内容:
(1)删除实验三中创建的数据库;
(2)用自己名字创建一个数据库,包含一个主数据文件data1和一个日志文件log1,最大值都是5M;增长量分别为10%和1M;存储在自己的文件夹下;
(3)添加一个数据文件data2,最大值为3M;
(4)添加一个日志文件log2,最大值为4M;
(5)添加一个文件组group1;
(6)添加一个次数据文件data3放在文件组group1中;
(7)修改数据文件data2,将最大值改为5M;
(8)删除日志文件log1;
(9)删除次数据文件data
3、data2;
(10)修改文件组,将group1改名为group2;
(11)删除文件组group2;
(12)将log2的增长量改为1M。
(13)缩小该数据库的大小,保留自由空间1M,保留释放的文件空间。
(14)将数据库的日志文件log2缩小到3M。
(15)将数据库更名为stud+自己的名字。
实验2SQL Server数据库的管理
1.实验目的
(1)了解SQL Server 数据库的逻辑结构和物理结构的特点。
(2)掌握使用SQL Server管理平台对数据库进行管理的方法。
(3)掌握使用Transact-SQL语句对数据库进行管理的方法。
2.实验内容及步骤
(1)在SQL Server管理平台中创建数据库。
① 运行SQL Server管理平台,在管理平台的对象资源管理器中展开服务器。
② 右击“数据库”项,在快捷菜单中选择“新建数据库”菜单项。在新建数据库对话框的数据库名称文本框中输入学生管理数据库名studentsdb,单击“确定”按钮。
(2)选择studentsdb数据库,在其快捷菜单中选择“属性”菜单项,查看“常规”、“文件”、“文件组”、“选项”、“权限”和“扩展属性”等页面。
(3)打开studentsdb数据库的“属性”对话框,在“文件”选项卡中的数据库文件列表中修改studentsdb数据文件的“分配的空间”大小为2MB。指定“最大文件大小”为5MB。修改studentsdb数据库的日志文件的大小在每次填满时自动递增5%。
(4)单击“新建查询”打开查询设计器窗口,在查询设计器窗口中使用Transact-SQL语句CREATE DATABASE创建studb数据库。然后通过系统存储过程sp_helpdb查看系统中的数据库信息。
(5)在查询设计器中使用Transact-SQL语句ALTER DATABASE修改studb数据库的设置,指定数据文件大小为5MB,最大文件大小为20MB,自动递增大小为1MB。
(6)在查询设计器中为studb数据库增加一个日志文件,命名为studb_Log2,大小为5MB,最大文件大小为10MB。
(7)使用SQL Server管理平台将studb数据库的名称更改为student_db。
(8)使用Transact-SQL语句DROP DATABASE删除student_db数据库。
3.实验思考
(1)数据库中的日志文件是否属于某个文件组?
(2)数据库中的主数据文件一定属于主文件组吗?
(3)数据文件和日志文件可以在同一个文件组吗?为什么?
(4)删除了数据库,其数据文件和日志文件是否已经删除?是否任何人都可以删除数据库?
(5)能够删除系统数据库吗?
数据库原理及实验报告
实验6 视图
实验目的:1)掌握交互式创建、删除视图的方法
2)掌握使用SQL创建、删除视图的方法
3)掌握交互式更新视图的方法
4)掌握使用SQL更新视图的方法 实验内容
6.1实验题目:创建视图
实验过程:1)交互式创建视图VIEW_S
2)交互式创建成绩视图VIEW_SCORETABLE
3)使用SQL创建课程表视图VIEW_CTABLE
实验结果:
6.2实验题目:修改视图
实验过程:1)使用交互式方法把视图VIEW_S中的字段SNO删掉
2)使用SQL为视图VIEW_CTABLE增加一个课时字段CT tiny int
实验结果:
6.3实验题目:通过视图修改数据库数据
实验过程:1)交互式通过修改视图VIEW_S中的数据来实现对其基本表S中数据的修改
2)对视图VIEW_S执行INSERT语句,查看此视图的基本表S中数据的变化
3)修改视图VIEW_S的定义,使其包含表S中的主键,再执行插入操作
4)用SQL语句对视图VIEW_S执行DELETE操作,查看此视图的基本表S中数据的变化 实验结果:
6.4实验题目:删除视图
实验过程:1)交互式删除视图VIEW_S
2)使用SQL删除视图VIEW_CTABLE
实验结果:
实验7 数据查询
实验目的:1,掌握从简单到复杂的各种数据查询。包括,单表查询、多表连接查询、嵌套查询、集合查询。
2,掌握用条件表达式表示检索结果。
3,掌握用聚合函数计算统计检索结果。 实验7.1 单表查询
实验目的:1,掌握指定列或全部列查询。
2,掌握按条件查询。
3,掌握对查询结果排序。
4,掌握使用聚集函数的查询。
5,掌握分组统计查询。 实验内容:1,指定或全部列查询。
2,按条件查询及模糊查询。
3,对查询结果排序。
4,使用聚集函数的查询。
5,分组统计查询。
实验7.2 连接查询 实验目的:掌握设计一个以上数据表的查询方法。多表之间的连接包括等值连接、自然连接、非等值连接、自身连接、自身连接、外连接和复合连接。
实验内容:1,连接查询,查询所有选课学生的学号、姓名、选课名称及成绩。
查询每门课程的课程号、任课教师姓名及其选课人数。
2,自身连接,查询所有比刘伟工资高的的教师的姓名、工资及刘伟的工资。
查询同时选修了程序设计和微机原理的学生的姓名、课程号。
3,外连接,查询所有学生的学号、姓名、选课名称及成绩(没有选课的学生的
选课信息显示为空)
实验结果
实验7.3 嵌套查询
实验目的:掌握嵌套查询使我们可以用多个简单查询构成复杂的查询。从而增强了SQL的查询能力。
实验内容:1,返回一个值的子查询,查询与刘伟教师职称相同的教师号、姓名和职称。
2,返回一组值的子查询,使用ANY谓词查询讲授课程号为C5的教师姓名。 使用IN谓词查询讲授课程号为C5的教师姓名。使用ALL谓词查询其他系中比计算机系所有教师工资都高的教师的姓名、工资、使用EXISTS谓词查询没有讲授课程号为C5的课程的教师姓名、所在系.使用NOT EXISTS谓词查询至少选修了学生S2选修的全部课程的学生的学号。 实验结果
实验7.4 集合查询
实验目的:掌握使用UNION操作符将来自不同查询但结构相同的数据集合组合起来,形成一个具有综合信息的查询结果。
实验内容:查询年龄不大于19岁或者属于计算机系的学生,步骤如下:打开新建查询窗口,创建SQL语句。执行语句。
实验结果
实验十.T-SQL程序设计与游标设计
实验目的
掌握Transact-SQL语言及其程序设计的方法 掌握T-SQL游标的使用方法
实验10.1 T-SQL程序设计逻辑 实验目的
掌握T-SQL程序设计的控制结构及程序设计逻辑 实验内容
(1) 计算1~100之间所有能被3整除的数的个数和总和。
(2) 从学生表S中选取SNO,SN,SEX,如果为“男”则输出M,如果为“女”则输出F。 实验 10.2 面向复杂T-SQL程序设计 实验目的
掌握面向复杂应用的T-SQL程序设计方法。 实验内容
(1) 从教学数据库jxsk中查询所有同学选课成绩情况:姓名,课程名,成绩。要求:凡成绩为空者输出“未考”;小于60分的输出“不及格”;60~70分的输出“及格”;70~80分的输出“中”;80~90分输出“良好”;90~100分输出优秀。并且输出记录按照下面要求排序:先按SNO升序,再按CNO升序,最后按成绩降序。
(2) 现给教师增加工资。要求:必须任两门以上课程且涨幅按总收入分成三个级别:4000元以上涨300;3000元以上涨200;3000元以上涨100。只任一门课程的涨50.其他情况不涨。
实验 10.2 使用游标 实验目的
学习和理解关系数据中游标的概念和设计思想。 掌握使用T-SQL游标处理结果集的方法。 实验内容
针对数据库jiaoxuedb,进行下面的实验:
(1).定义一个游标Cursor_Famale。要求该游标返回所有女同学的基本信息,在游标中查找并显示牛莉的记录。 (2).创建一个一个储存过程Pro_C,返回一个包含所有选修数据库课程的学生基本信息的游标。利用该存储过程,通过学生姓名查找学生王一山是否选修了数据库课程以及成绩。