数据库原理 实验报告
目录
实验一 SQL Server的安装和配置 4
一、实验目的 4
二、实验内容 4
三、实验步骤 4
四、实验代码和结果 4
五、实验总结与体会 4
实验二 创建数据库 5
一、实验目的 5
二、实验内容 5
三、实验步骤 5
四、实验代码和结果 6
五、实验总结与体会 6
实验三 创建数据表 7
一、实验目的 7
二、实验内容 7
三、实验步骤 7
四、实验代码和结果 8
五、实验总结与体会 9
实验四 管理表数据 10
一、实验目的 10
二、实验内容 10
三、实验步骤 10
四、实验代码和结果 10
五、实验总结与体会 13
实验五 简单数据查询 14
一、实验目的 14
二、实验内容 14
三、实验步骤 14
四、实验代码和结果 14
五、实验总结与体会 18
实验六 高级数据查询 19
一、实验目的 19
二、实验内容 19
三、实验步骤 19
四、实验代码和结果 19
五、实验总结与体会 20
实验七 视图 21
一、实验目的 21
二、实验内容 21
三、实验步骤 21
四、实验代码和结果 21
五、实验总结与体会 24
实验八 索引 25
一、实验目的 25
二、实验内容 25
三、实验步骤 25
四、实验代码和结果 25
五、实验总结与体会 26
实验九 数据库维护 27
一、实验目的 27
二、实验内容 27
三、实验步骤 27
四、实验代码和结果 27
五、实验总结与体会 27
实验十 SQL程序设计 …28
一,实验目的………………………………………………………………………………28
二,实验内容………………………………………………………………………………28
三,实验步骤………………………………………………………………………………28
四,实验代码和结果………………………………………………………………………28
五,实验总结和体会………………………………………………………………………29
实验一 SQL Server的安装和配置
一, 实验目的
(1) 了解Microsoft SQL Server 2008系统。
(2) 掌握SQL Server 2008的安装过程。
(3)熟悉SQL Server Management Studio的工作环境。
(4)掌握sQL Server 2008服务器注册与配置。
二,实验内容
(1) SQL Server 2008数据库管理系统安装。
(2) SQL Server 2008 Management Studio 使用。
(3) SQL Server 2008服务器配置。
三,实验步骤
(1)安装SQL Server 2008数据库管理系统。
安装SQL Server 2008数据库管理系统,熟悉其安装过程。
从微软官方下载SQL Server 2008 Enterprise Evaluation,将其安装到本地计算机,使本地计算机成为服务器和客户端工具,并采用Windows身份验证模式。
SQL Server 2008的安装与其他Microsoft Windows系列产品类似。用户可根据向导提示,选择需要的选项一步一步地完成。安装过程中涉及的实例名、用户账户、身份验证模式、排序规则等关键内容需要我们根据安装界面的提示和实际的需要来进行设置。
(2)启动SQL Server Management Studio.
启动SQL Server Management Studio,熟悉其界面环境。
在SQL Server以前的版本中主要有两个工具:图形化的管理工具(EnterpriseManager)和T-SQL编辑器(Query Analyzer)。 在SQL Server 2008 中,SQL ServerManagement Studio将Enterprise Manager和Query Analyzer两个工具结合在一一起,可以在对服务器进行图形化管理的同时编写T-SQL. SQL Server Management Sudio中的对象浏览器结合了Query Analyzer的对象浏览器和Enerpie Manager的服务器树形视图,可以浏览所有已注册的服务器。另外,对象浏览器还提供了类似与Query Analyzer的工作区,工作区中有类似语言解析器和显示统计图的功能。现在可以在编写查询和脚本的同时,在同一个工具下使用Wizards和属性页面处理对象。
(3)注册服务器。
服务器只有在注册后才能被纳人SQL Server Management Studio的管理范围。为了18 管理、配置和使用Microsoft SQL Server 2008 系统,必须使用Microsoft SQL Server
Management Studio工具注册服务器。注册服务器就是为Microsoft SQL Server 客户机/服务器系统确定一台数据库所在的机器,该机器作为服务器,可以为客户端的各种请求提供服务。在SQL Server Management Studio中有一个单独可以同时处理多台服务器的注册服务器窗口,同时其不仅可以对服务器进行注册,还可以注册分析服务、报告服务、SQLServer综合服务以及移动SQL等。
(4)配置SQL Server 2008。
利用SQL Server 2008配置管理器,对数据库管理系统进行配置。
启动SQL Server配置管理器,查看与SQL Server相关联的服务,并尝试启动和停止服务、配置SQL Server使用的网络协议以及从sQL Server客户端计算机管理网络连接配置。
四,实验代码和结果
五,实验总结和体会
成功安装了SQL Server 2008,步骤不算复杂,但需要自己动手配置的地方很多,安装总体来说还算顺利。
实验二 创建数据库
一,实验目的
(1)了解sQL Server 数据库的物理结构和逻辑结构。
(2)掌握使用对象资源管理器创建和管理数据库。
(3)掌握使用T-SQL语句创建和管理数据库。
二,实验内容
(1)利用对象资源管理器创建、修改和删除数据库。
(2)利用T-SQL语句创建修改和删除数据库。
三,实验步骤
(1)启动sQL Server Management Studio,在对象资源管理器中,利用图形化的方法创
建数据库student.
(2)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法修改数据库student,增加数据文件。
其中:数据文件逻辑名student_ data2,操作系统文件的名称为C:\Program Files\Microsoft SQL Server\MSSQL10. MSSQLSERVER\ MSSQL\DATA\student_ data2. ndt,
初始大小为50MB,最大为100MB,以30%的速度增长。
(3)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法删除数据库student。
(4)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语何
CREATE DATABASE命令创建数据库student.
(5) 启动SQL Server Management Studio,在 SQL编辑器中,利用T-SQL语句ALTER DATABASE命令修改数据库student,增加日志文件。
其中:日志文件逻辑名student_ log2,操作系统文件的名称为 C:\Program Files\Microsoft SQL Server\MSSQL10. MSSQLSERVER\MSSQL\DATA\student_ data2. ldf,初始大小为3MB,最大为50MB,以1M的速度增长。
(6)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句DROPDATABASE命令删除数据库student。
四,实验代码和结果
–创建数据库student
CREATE DATABASE student
ON PRIMARY
(
NAME=student_data,
FILENAME=‘E:\数据库\student_data.mdf’,
SIZE=3,
MAXSIZE= UNLIMITED,
FILEGROWTH=1
)
LOG ON
(
NAME=student_log,
FILENAME=‘E:\数据库\student_log.ldf’,
SIZE= 1,
MAXSIZE= 20,
FILEGROWTH=10%
)
–修改数据库student,增加日志文件
alter database student
add log file
(
NAME=student_log2,
FILENAME=‘E:\数据库\student_log2.ldf’,
SIZE= 3,
MAXSIZE= 50,
FILEGROWTH=1
)
–删除数据库student
drop database student
五,实验总结和体会
除了可以通过对象资源管理器的图形化界面创建数据库外,还可以使用T-SQL语言所提供的CREATE DATABASE语句来创建数据库。通过实验个人认为,后一种方法更加简单有效。
实验三 创建数据表
一,实验目的
(1)了解SQL Server表的结构特点。
(2)了解SQL Server 2008的基本数据类型。
(3)掌握对象资源管理器创建和管理数据表。
(4)掌握T-SQL语句创建和管理数据表。
(5)理解约束的概念。
二,实验内容
(1)在对象资源管理器创建修改和删除数据表。
(2)利用T-SQL语句创建、修改和删除数据表。
(3)创建主键约束、缺省约束、check约束、唯一约束和外键约束。
三,实验步骤
(1)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法创建学生信息表stu_info、课程信息表course_info和学生成绩表stu_grade,其结构参考附录A。
(2)启动SQL Server ManagementStudio,在对象资源管理器中,利用图形化的方法对数据表进行修改:
*在数据表stu_info中,增加备注字段,字段名memo,字段类型nvarchar,字段长度
200,允许为空。
*在数据表stu_info中,删除备注字段memo。
*在数据表course_info中,对于字段course_name设置UNIQUE约束。
*在数据表stu_grade中,对于字段grade设置CHECK约束,其取值在0~100之间。
*在数据表stu_grade中,对于字段stu_id设置FOREIGN KEY约束,其取值参考数据 表stu_info中stu_id 字段取值。
(3)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法删除数据表stu_grade.
(4)启动SQL Server Management Studio,在 SQL编辑器中,利用T-SQL语句CREATE TABLE命令创建学生信息表stu_info、课程信息表course_info 和学生成绩表
stu_grade,其结构参考附录A。
(5)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句ALTER TABLE命令修改数据表:
*在数据表stu_info中,增加身份证号码字段,字段名code,字段类型char,字段长度
18,允许为空。
*在数据表stu_info中,对于字段code设置UNIQUE约束。
*在数据表stu_info中,删除身份证号码字段code.
*在数据表stu_grade中,对于字段grade设置CHECK约束,其取值在0~100之间,
*在数据表stu_grade中,对于字段course_id 设置FOREIGN KEY约束,其取值参 考数据表course_info中course_id字段取值。
(6)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句DROP TABLE 命令删除数据表stu_info。
四,实验代码和结果
–创建数据表
create table stu_info(
stu_id char(10) not null constraint pk_stu_id primary key, --主键
name nvarchar(20) not null,
birthday date null,
sex nchar(1) null default ‘男’,
address nvarchar(20) null,
mark int null,
major nvarchar(20) null,
sdept nvarchar(20) null,
);
GO
CREATE TABLE course_info(
course_id char(3) NOT NULL constraint pk_course_id primary key, --主键
course_name nvarchar(20) NOT NULL,
course_type nvarchar(20) NULL default ‘考试’,
course_mark tinyint NULL,
course_time tinyint NULL,
pre_course_id char(3) NULL constraint fk_pre_course_id foreign key references course_info(course_id), --外键
);
GO
CREATE TABLE stu_grade(
stu_id char(10) not null CONSTRAINT fk_stu_id FOREIGN KEY REFERENCES stu_info(stu_id), --外键
course_id char(3) not null CONSTRAINT fk_course_id FOREIGN KEY REFERENCES course_info(course_id), --外键
grade tinyint null,
);
–stu_grade:stu_id与course_id合在一起作为主键
GO
ALTER TABLE stu_grade
ADD CONSTRAINT pk_stu_course PRIMARY KEY(stu_id,course_id)
–修改数据表
GO
ALTER TABLE stu_info
ADD code char(18) NULL
GO
ALTER TABLE stu_info
ADD CONSTRAINT un_code UNIQUE --UNIQUE约束:确保某个或某些列(非主键列)没有相同的列值
GO
ALTER TABLE stu_info
DROP COLUMN code
GO
ALTER TABLE stu_grade
ADD CONSTRAINT ck_grade CHECK(grade between 0 and 100) --CHECK约束:限制输入到一列或多 列的值的范围
----删除数据表
–DROP TABLE stu_info
五,实验总结和体会
创建数据表的一般步骤为:首先定义表结构,即给表的每一列取列名,并确定每一列的数据类型、数据长度、列数据是否可以为空等;然后,为了限制某列数据的取值范围,以保证输入数据的正确性和一致性而设置约束;当表结构和约束建立完成之后,最后就可以向表中输入数据了。
实验四 管理表数据
一,实验目的
(1)掌握在对象资源管理器中对数据表进行插人、修改和删除数据的操作。
(2)掌握T-SQL语句对数据表进行插人、修改和删除数据的操作。
二,实验内容
(1)利用对象资源管理器向数据表中添加、修改和删除数据。
(2)使用T-SQL语句向数据表中添加、修改和删除数据。
三,实验步骤
(1)启动SQL Sever Mangement Sudi,在对象资源管理器中,利用图形化的方法向学生信息表stu_info、课程信息表course. info和学生成绩表stu grade中添加数据,其数据
内容参考附录B。
(2)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法对
表数据进行修改:
*在数据表stu_info中,将学号(stu_ id)为2007070101同学的籍贯address)改为“河
南洛阳”。
*在数据表stu_ grade中,将成绩(grade)小于60分的所有同学成绩增加10%。
(3)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法删除数据表stu_ grade中成绩(grade)小于60分的记录。
(4) 启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句INSERT INTO命令向学生信息表stu_ info、 课程信息表course_ info 和学生成绩表stu_grade中添加数据,其数据内容参考附录B。
(5)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句UPDATE命令修改表数据:
*在数据表stu info 中,将学号(stu_ id) 为2007070102同学的院系(sdept)改为“会计 学院”。
*在数据表stu grade中,将成绩(grade)小于60分的所有同学成绩置空。
(6)启动sQL Server Management Studio,在SQL 编辑器中,利用T-SQL语句DELETE命令删除数据表stu info中所有性别(sex)为空的记录。
四,实验代码和结果
–添加表数据
INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept)
VALUES(‘2007070101’,‘张元’,‘男’,‘1985-10-09’,‘河南许昌’,576,‘计算机科学与技术’,‘信息学院’)
INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept)
VALUES(‘2007070102’,‘张红’,‘女’,‘1985-01-14’,‘河南开封’,565,‘计算机科学与技术’,‘信息学院’)
INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
VALUES(‘2007070103’,‘王明’,‘男’,‘1986-07-08’,‘河南洛阳’,570,‘计算机科学与技术’,‘信息学院’)
INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
VALUES(‘2007070104’,‘李伟’,‘男’,‘1986-03-11’,‘河南郑州’,564,‘计算机科学与技术’,‘信息学院’)
INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
VALUES(‘2007070201’,‘郑澜’,‘女’,‘1985-12-01’,‘河南平顶山’,567,‘电子商务’,‘信息学院’)
INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
VALUES(‘2007070202’,‘赵恒’,‘男’,‘1986-03-11’,‘河南周口’,566,‘电子商务’,‘信息学院’)
INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
VALUES(‘2007070203’,‘张兰’,‘女’,‘1986-03-11’,‘河南许昌’,571,‘电子商务’,‘信息学院’)
INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
VALUES(‘2007080101’,‘李伟’,‘男’,‘1986-03-11’,‘河南郑州’,578,‘会计学’,‘会计学院’)
INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
VALUES(‘2007080102’,‘钱丽’,‘女’,‘1986-03-11’,‘河南安阳’,573,‘会计学’,‘会计学院’)
INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
VALUES(‘2007080201’,‘孙楠’,‘男’,‘1986-1-19’,‘河南南阳’,578,‘财务管理’,‘会计学院’)
INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
VALUES(‘701’,‘计算机基础’,‘考试’,3,50,NULL)
INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
VALUES(‘702’,‘操作系统’,‘考试’,4,50,701)
INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
VALUES(‘703’,‘计算机网络’,‘考试’,4,50,701)
INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
VALUES(‘704’,‘数据库原理’,‘考察’,3,50,701)
INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
VALUES(‘706’,‘Java’,‘考察’,3,40,704)
INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
VALUES(‘801’,‘宏观经济学’,‘考试’,4,50,NULL)
INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
VALUES(‘802’,‘初级会计’,‘考试’,4,50,NULL)
INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
VALUES(‘803’,‘财政学’,‘考试’,3,50,NULL)
INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
VALUES(‘804’,‘会计电算化’,‘考查’,3,NULL,NULL)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007070101’,‘701’,89)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007070101’,‘702’,81)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007070101’,‘703’,96)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007070102’,‘701’,85)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007070102’,‘702’,74)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007070102’,‘703’,77)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007070104’,‘701’,91)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007070104’,‘702’,88)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007080101’,‘801’,79)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007080101’,‘802’,91)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007080102’,‘801’,87)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007080102’,‘802’,83)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007080201’,‘803’,75)
INSERT INTO stu_grade(stu_id,course_id,grade)
VALUES(‘2007080201’,‘804’,82)
–修改表数据
GO
UPDATE stu_info
SET sdept='会计学院’WHERE Stu_id =‘2007070102’
GO
DELETE FROM stu_grade WHERE grade<‘60’
–删除stu_info中所有性别(sex)为空的记录
GO
DELETE FROM stu_info WHERE sex=‘男’ and sex=‘女’
五,实验总结和体会
如果向表中所有列都要插入数据时,字段名表可以省略,但必须保证VALUES后的各数据项位置和类型与表结构的定义完全一致,使得输入的数据真实有效。
在插人数据时,对于允许空值的列,可以使用用NUL插入空值;对于具有默认值的列,
可以使用 DEFAULT插人默认值。
INSERT INTO除了能够实现一次插入一条记录以外,也可以通过子查询实现一次插入多条记录。
实验五 简单数据查询
一,实验目的
(1) 掌握SELECT语句的基本语法。
(2)掌握数据汇总的方法。
(3) 掌握SELECT语句的GROUP BY子句的作用和使用方法。
(4)掌握SELECT语句的ORDER BY子句的作用和使用方法。
二,实验内容
(1) SELECT语句的基本使用。
(2)数据汇总。
(3) GROUP BY子句和ORDER BY、COMPUTEBY子句的使用。
三,实验步骤
针对student数据库中,stu_info数据表,course_info数据表和stu_grade数据表,完成下列查询。
(1) SELECT基本使用
查询每个同学的所有数据。
查询每个同学的学号、姓名和院系。
查询学号为2070同学的姓名、性别、籍贯和院系。
查询每个女同学的学号,姓名和院系,并将结果中各列的标题指定为学号、姓名和
院系。
查询计算每个同学的年龄。
查询所有其籍贯含有“阳”的同学的姓名、性别、籍贯。
查询课程编号702,且成绩 在70~80之间的同学的学号。
(2)数据汇总
查询信息学院同学入学平均分。
查询全体同学的入学最高分和最低分。
查询会计学院同学总人数。
查询学号为207070101同学的各门课程总分。
(3) GROUP BY
查询每个院系的总人数。
查询每位同学的平均分。
(4) ORDER BY
将各位同学的信息按入学成绩由高到低排列输出。
查询每个同学的学号、姓名、课程名和成绩信息,并按成绩由低到高排列输出。
四,实验代码和结果
–select 基本使用
GO
SELECT*
FROM stu_info
GO
SELECT*
FROM stu_grade
GO
SELECT*
FROM course_info
GO
SELECT stu_id,name,sdept
FROM stu_info
GO
SELECT name,sex,address,sdept
FROM stu_info
WHERE stu_id=‘2007070103’
GO
SELECT stu_id AS’学号’,name AS’姓名’,sdept AS’院系’
FROM stu_info
WHERE sex=‘女’
GO
SELECT birthday
FROM stu_info
GO
SELECT name,sex,address
FROM stu_info
WHERE address like ‘%阳%’
GO
SELECT grade
FROM stu_grade
WHERE course_id=702 and grade between 70 and 80
–数据汇总
GO
SELECT AVG(mark)as’平均分’
FROM stu_info
WHERE sdept=‘信息学院’
GO
SELECT MAX(mark)as’最高分’,MIN(mark)as’最低分’
FROM stu_info
GO
SELECT COUNT()as’会计学院总人数’
FROM stu_info
WHERE sdept=‘会计学院’
GO
SELECT sum(grade)
FROM stu_grade
WHERE Stu_id=2007070101
–GROUP BY
GO
SELECT sdept,COUNT()as’总人数’
from stu_info
group by sdept
GO
SELECT stu_id,AVG(grade)as’平均分’,COUNT()as’课程数’
from stu_grade
group by stu_id
–ORDER BY
GO
SELECT
FROM stu_info
order by mark desc --desc:降序排列
GO
SELECT stu_info.stu_id,name,course_name,grade
FROM stu_info,course_info,stu_grade
WHERE stu_info.Stu_id=stu_grade.Stu_id and stu_grade.course_id =course_info.course_id
order by grade asc --asc:升序(默认)
五,实验总结和体会
实验时要注意查询要求的详细描述,先确定要查询的表然后确定要输出的列和行,如果没有指定输出列,默认为输出所有列。
在数据查询时,经常需要对表中的列进行计算,才能获得所需要的结果。在SELECT
子句中可以使用各种运算符和函数对指定列进行运算
在SQL语言中, ORDER BY子句用于排序。 ORDER BY子句总是在 WHERE子句(如果有的话)后面说明的,可以包含一个或多个列,每个列之间以逗号分隔,可以选择使用ASC/ DESC关键字指定按照升序降序排序。如果没有特别说明値長以升序序列进行排序的。如用于多列进行排序,各列在 ORDER BY子句中的顺序决定了排序过程中的优先级。
使用 GROUP BY子包为每一个组产生一个汇总结果,每个组只返回一行,不返回详细信息。SELECT子句句中指定的列必须是 GROUP BY子句中指定的列,或是和聚合函数起使用。如果包含 WHERE子句,则只对满足 WHERE条件的行进行分组汇总。如果 GROUP BY子句使用关键字ALL,则 WHERE子句将不起作用。
实验六 高级数据查询
一,实验目的
(1)掌握嵌套查询、连接查询的表示。
二,实验内容
(1) 嵌套查询的使用。
(2) 连接查询的使用。
三,实验步骤
针对student数据库中,stu_info数据表,course_info数据表和stu_grade数据表,完成下列查询。
(1)嵌套查询
查询选修702课程的同学的学号、姓名和院系信息。
查询没有选修702课程的同学的学号、姓名和院系信息。
查询比会计学院的同学人学分数都高的同学的学号、姓名、专业和院系信息。
(2)连接查询
查询每个同学的学号、姓名、课程名和成绩信息。
查询人学成绩大于575分的同学姓名和其选课情况(包括课程名称、课程学时和成绩)。
四,实验代码和结果
–嵌套查询
GO
SELECT stu_id,name,sdept
FROM stu_info
WHERE stu_id IN (
SELECT stu_id
FROM stu_grade
WHERE course_id=702
)
GO
SELECT stu_id,name,sdept
FROM stu_info
WHERE stu_id not IN (
SELECT stu_id
FROM stu_grade
WHERE course_id=702
)
GO
SELECT stu_id,name,major,sdept
FROM stu_info
WHERE mark>ALL
(SELECT mark
FROM stu_info
WHERE sdept=‘会计学院’)
AND sdept<>‘会计学院’
–连接查询
GO
SELECT stu_info.Stu_id,name,course_name,grade
FROM stu_info
left outer join stu_grade on stu_info.Stu_id=stu_grade.Stu_id
left outer join course_info on stu_grade.course_id=course_info.course_id
GO
SELECT name,course_name,course_time,grade
FROM stu_info,course_info,stu_grade
WHERE stu_info.Stu_id=stu_grade.Stu_id and stu_grade.course_id =course_info.course_id and mark>575
五,实验总结和体会
表的连接的实现可以通过两种方法:利用 SELECT语句的 WHERE子句。在FROM子句中使用JOIN关键字。由于连接是涉及多个表及其之间的引用,所以列的引用必须明确指出,对于重复的列名必须用表名限定,即 Table_name. Column_name的完整表达方式。
所谓嵌套查询指的是在一个SELECT査询语句中包含另一个(或多个)SELECT查询语句。其中,外层的SELECT查询语句叫外部查询,内层的的SELECT査询语句叫子查询。使用子查询时需注意以下几个问题:子查询可以嵌套多层。子查询需用圆括号括起来。子查询中不能使用COMPUTE[BY]和INTO子句。子查询的SELECT语句中不能使用 Image、text或 ntext数据类型。
实验七 视图
一,实验目的
(1)理解视图的重要性。
(2)掌握在对象资源管理器中创建和管理视图。
(3)掌握T-SQL语句创建和管理视图。
二,实验内容
(1)在对象资源管理器创建、修改和删除视图。
(2)在对象资源管理器使用视图。
(3)利用T-SQL语句创建、修改和删除视图。
(4)利用T-SQL语句使用视图。
三,实验步骤
(1)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法创建下列视图:
视图view_male,包含学生信息表中所有男生信息。
视图view_ stu_grade,包含每个同学的学号、姓名、课程名和成绩信息。
视图view_ avg, 包含每个同学的学号、姓名、平均成绩信息。
(2)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法对视图v_ male进行修改,只显示信息学院所有男生的信息。
(3)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法删除视图view_ male.
(4)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法查询视图view_ male 中的记录信息。
(5)启动SQL Server Management Studio,在 SQL编辑器中,利用T-SQL语句CREATE VIEW命令创建下列视图:
视图view. female, 包含学生信息表中所有女生信息。
视图view. count,包含每个院系的名称和学生人数信息。
视图view sum,包含每个同学的学号、姓名、课程总成绩信息。
(6)启动SQL Server Management Studio在SQL编辑器中,利用TSQL语句ALTER VIEW命令修改视图view _female,增加加密性。
(7)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句DROP
VIEW命令删除视图view_female.
(8)启动SQL Server Management Studio,在SQL编辑器中通过视图,利用T-SQL语句查询下列信息:
查询“信息学院”的学生人数。
查询学号2007070101同学的所选课程和课程成绩信息。
四,实验代码和结果
–创建视图
create view view_female
with encryption --加密
as
select*
from stu_info
where sex=‘女’
go
create view view_count(sdept,count)
as
select sdept,count() as’学生人数’
from stu_info
group by sdept
go
create view view_sum(学号,姓名,总成绩)
as
select stu_info.stu_id,stu_info.name,sum(grade)
from stu_info left outer join stu_grade
on stu_info.stu_id=stu_grade.stu_id
group by stu_info.stu_id,name
go
create view view_stu_grade
as
select stu_info.stu_id,name,course_name,grade
from stu_info
left outer join stu_grade on stu_info.Stu_id=stu_grade.Stu_id
left outer join course_info on stu_grade.course_id=course_info.course_id
----删除视图
–go
–drop view view_female
–查询信息
go
select count() as’学生人数’
from view_female
where sdept=‘信息学院’
go
select*
from view_stu_grade
where stu_id=‘2007070101’
五,实验总结和体会
视图的定义和属性信息都保存在系统数据库和系统数据表中,可以通过系统提供的存
储过程来获取有关视图的定义信息。sp help用于返回视图的特征信息。sp_ helptext查看视图的定义文本。sp_ depends查看视图对表的依赖关系和引用的字段。
通过本次实验,我练习了在对象资源管理器中创建、修改、删除和使用视图,以及利用T-SQL语句创建、修改、删除和使用视图,理解了视图的重要性,掌握了在对象资源管理器中和利用T-SQL语句创建和管理视图。
实验八 索引
一,实验目的
(1)理解索引的概念和分类。
(2)掌握在对象资源管理器中创建和管理索引。
(3)掌握T-SQL语句创建和管理索引。
二,实验内容
(1)在对象资源管理器创建、修改和删除索引。
(2)在对象资源管理器使用索引。
(3)利用T-SQL语句创建、修改和删除索引。(4)利用T-SQL语句使用索引。
三,实验步骤
(1)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法创建下列索引:
*对学生信息表stu_info的name列创建非聚集索引idx_name。
*对学生成绩表stu_ info 的stu_ id .course_ id列创建复合索引idx stu course_ id
(2)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法对索引idx_ name进行修改,使其成为唯一索引。
(3)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法删除索引idx_ stu_ course_ id。
(4)启动SQL Server Management Studio,在 SQL编辑器中,利用T-SQL语句CREATE INDEX命令创建下列索引:
*对课程信息表course_info的course_name列创建非聚集索引idx_course _name。
*对学生成绩表stu_grade的stu_id、course_id列创建复合索引idx_stu course id。
(5)启动SQL Server Management Studio,在sQL编辑器中,利用T-SQL语句对索引
idx course_name进行修改,使其成为唯索引。
(6)启动SQL Server Management Studio,在SQL编辑器中,利用系统存储过程sp_helpindex查看索引idx course _name信息。
(7)启动SQL Server Management Sudio,在sQL编辑器中,利用T-SQL语句DROPINDEX命令删除索引idx course _name.
四,实验代码和结果
–创建索引
CREATE UNIQUE NONCLUSTERED INDEX idx_course_name --唯一非聚集
ON course_info(course_name)
GO
CREATE INDEX idx_stu_course_id
ON stu_grade(stu_id,course_id)
–查看
GO
Exec sp_helpindex course_info
–删除
GO
DROP INDEX course_info.idx_course_name
五,实验总结和体会
在 SQL Server2008中,提供了多种索引类型。如果以存储结构来区分,则有“聚集索
引”( Clustered Index,也称聚类索引、簇集索引)和“非非聚集索引”( Nonclustered Index,也称非聚类索引、非簇集索引)的的区别;如果以数据的唯一性来区别,则有“唯一索引”( Unique Ihdex)和“非唯一索引”( Nonunique Index)的不同;若以键列的个数来区分,则有“单列索引”与“多列索引”的分别。
利用系统提供的存储过程sp_ rename可以对索引进行重命名。
利用系统提供的存储过程sp_ helpindex可以查看索引信息,其语法格式如下:
sp_helpindex [@objname =]’object_name’,其中,[@objname =]’object_name’表示所要查看的当前数据库中表的名称。
实验九 数据库维护
一,实验目的
(1)理解备份与恢复的意义。
(2)掌握在对象资源管理器中备份和恢复数据库。
(3)掌握T-SQL语句备份和恢复数据库。
二,实验内容
(1)在对象资源管理器中备份和恢复数据库。
(2)利用T-SQL语句备份和恢复数据库。
三,实验步骤
(1)启动SQL Server Management Studio, 在对象资源管理器中,利用图形化的方法对数据库student进行完整备份。
(2)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法,针对(1)中的完整备份,对数据库student进行恢复。
(3)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句BACKUP命令对数据库student进行完整备份。
(4)启动SQL Server Management Studio,在 sQL编辑器中,利用T-SQL语句
RESTORE命令,针对()中的完整备份对数据库sudent 进行恢复。
四,实验代码和结果
–完整备份
Backup Database student
To Disk=‘E:\数据库\备份\student.bak’
–恢复
Restore Database student
From Disk=‘E:\数据库\备份\student.bak’
五,实验总结和体会
数据库的备份和恢复是数据库管理员维护数据库安全性和完整性必不可少的操作,合
理地进行备份和恢复可以将可预见的和不可预见的问题对数据库造成的伤害降到最低。当
运行 SQL Server的服务器出现故障,或数据库遭到某种程度的破坏时,可以利用以前对数
据库所做的备份重建或恢复数据库。
通过这次实验,掌握了数据库备份的概念和种类,各种数据库备份的实现方法,数据库恢复模型以及从各种数据库备份中恢复数据库的方法。
实验十 SQL程序设计
一、实验目的
1.熟练掌握变量的定义和赋值。
2.掌握各种运算符。
3.掌握流程控制语句,尤其是条件语句和循环预语句。
二、实验内容
1.全局变量和局部变量的定义与使用。
2.流程控制语句的使用。
三、实验步骤
1.创建一名为Student_name的局部变量,并在select语句中使用该变量查找“张元”同学所选课程的成绩情况,给出相应的语句段和运行结果。
2.将选修课程号为701的同学的成绩增加3分,同时使用全局变量@@rowcount检查获得更新的数据行数目。
3.利用学生数据库student中的stu_grade表查找学生的成绩信息并判断是否有某学生的某门课程的成绩在90分以上的信息,若有,则显示学号、姓名、课程名和成绩,否则输出信息,说明“不存在成绩大于90分的学生!”
4.从学生数据库student中查询所有学生选课成绩情况:姓名、课程名、成绩。要求:将学生的百分制转换为5级评分制,成绩大于等于90显示为“优秀”,成绩在80-89分显示为“良好”,“70-79”分显示为“中等”,成绩在60-69显示为“及格”,60以下显示为“不及格”,没成绩的显示为“未考”。
四,实验代码和结果
Declare @Student_name varchar(20)
Set @Student_name=‘张元’
SELECT grade
From stu_grade,stu_info
WHERE stu_grade.stu_id=stu_info.stu_id AND name=‘张元’
GO
UPDATE stu_grade
Set grade=grade+3
WHERE course_id=‘701’
if @@rowcount=0
print’警告:没有发生更新数据行!’
else
print @@rowcount
GO
if Exists(SELECT * From stu_grade where grade>90)
SELECT stu_info.stu_id,name,course_name,grade
From stu_grade,stu_info,course_info
WHERE stu_grade.stu_id=stu_info.stu_id AND stu_grade.course_id=course_info.course_id AND grade>90
else
print’不存在成绩大于90分的学生!’
GO
SELECT name,course_name,grade=
case
When grade>=90 then’优秀’
When grade>=80 then’良好’
When grade>=70 then’中等’
When grade>=60 then’及格’
When grade>0 then’不及格’
else ‘未考’
END
FROM stu_info,stu_grade,course_info
WHERE stu_info.stu_id=stu_grade.stu_id AND stu_grade.course_id=course_info.course_id
五,实验总结和体会
通过这次实验的学习,掌握以下内容:常量的使用,变量的定义和和赋值,各种运算符的使用与表达式的用法以及流程控制语句的使用。