Sql Server 数据库实验报告

数据库原理 实验报告

目录
实验一 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

五,实验总结和体会
通过这次实验的学习,掌握以下内容:常量的使用,变量的定义和和赋值,各种运算符的使用与表达式的用法以及流程控制语句的使用。

  • 68
    点赞
  • 607
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
本文档为数据库上机实验报告,是自己认认真真一步一步写的,报告包含试验的具体步骤,过程以及代码和实验结果截图,和实验总结。 实验一 实验题目: 数据库管理系统的使用 实验目的: 掌握SQL SERVER2005的使用和数据库设计的一般方法。 实验内容: (1)SQL SERVER2005的使用 (2)数据库的设计过程并利用SQL SERVER2005建立数据库。 实验二 实验题目: 数据库的定义 实验目的:掌握数据表建立、修改、删除、索引的SQL语句。 实验内容: (1)数据表的建立 (2)数据表的修改 (3)数据表的删除 (4)数据表的索引建立 为S表的DEPT建立唯一索引 (5)视图的建立与删除 建立一个计算机系学生基本信息视图CSV(SNO,SNAME,SEX,AGE) 查询1983年以后出生的计算机系学生基本信息。 建立一个计算机系学生成绩视图JSGV(SNO,CNO,GRADE)。 查询计算机系学生选课多于3门的学生学号。 查询计算机系学生2号课不及格的学生学号和成绩。 实验三 实验题目: 数据表的操作 实验目的: 掌握数据表数据操作的SQL语句。 实验内容: SQL语句插入数据操作 SQL语句修改数据操作 SQL语句删除数据操作 SQL语句查询数据操作 维护数据SQL语句: (1)在学生表插入一新生信息(‘200213808’,’HUJING’,’女’,22,’计算机’) (2)删除数据库学号为’200213801’的退学学生有关信息。 (3)将计算机系学生2号课成绩全部提高5%。 查询数据SQL语句: (4)统计有学生选修的课程门数。 (5)统计HU老师所授每门课程的学生平均成绩。 (6)统计所有选修人数多于20的课程号和选课人数,并按人数降序排列,若人数相等,则按课程号升序排列。 (7)检索所有缓考即成绩为NULL的同学学号姓名和缓考课程号。 (8)检索‘OS’课成绩高于该课平均成绩的同学学号。 (1) 检索计算机系女生的学号姓名。 (2) 检索全体学生姓名、出生年份和所在系。 (3) 检索未选修任何课程的学生学号。 (4) 检索WANG老师所授课程号、课程名。 (5) 检索所有姓LI同学的基本信息。 (6) 检索选修‘DATABASE’课程的学生学号。 (7) 检索年龄介于LIPING同学年龄和28岁之间的学生基本信息。 (8) 检索选修TIAN老师所授全部课程的学生学号。 实验四 实验题目: T-SQL编程 实验目的: 掌握T-SQL语句的使用。 实验内容: 1.定义一个表变量,用来存储两名学生的学号姓名,所在系。 2.编写一个自定义的函数,该函数接受一个学生姓名,返回其学生表基本信息及选课情况。 3.试用CASE语句输出学生表各年龄段的学生人数。 4.编写存储过程,以系别作为参数,统计指定系别的人数,并作为存储过程的输出。 实验题目: 数据库的完整性 实验目的: 掌握数据库的完整性约束定义,完整性检查及违约处理方式。 掌握触发器的定义及使用。 实验内容: 1. 定义S, C表的完整性约束 2. 定义SC表的完整性约束,要求当其被参照表发生删除操作时,违约处理的方式为级联,当其被参照表发生修改操作时,违约处理的方式为拒绝。 3. 触发器 ☆ 建立一DML触发器,每当学生的成绩发生更新时,将更新的学号,成绩存入g-log表内 ☆ 建立一个INSTEAD OF触发器,每当修改课程表记录时,利用触发器动作替代修改操作。 ☆ 建立一个DDL 触发器,不允许删除数据库表,并作出响应。 实验六 实验题目: 数据库的安全性 实验目的: 掌握SQL SERVER 2005的安全控制机制 实验内容: 1. 创建登录 创建lg1,lg2,并设定口令 2. 定义用户 定义user1,user2,user1以lg1登录,user2以lg2登录,user1定义角色ddl_admin,datareader,datawriter 3. 掌握SQL SERVER 2005架构和用户分离的概念 为user1创建架构u1,并建立test表,通过授权模式的方法,授权给user2表访问test的权限 4. 数据库的授权、收权语句 ☆ 将查询SC表和修改GRADE属性的权限授予用户user1。 ☆ 将对表S的插入权限授予用户user2,并允许他将此权限授予其他用户。 ☆ 收回所有用户对表S的插入权限。 实验七 实验题目: 数据库的设计 实验目的: 掌握数据库的概念结构设计和逻辑结构与设计,掌握ER图的表示方法即如何将ER模型转化为关系模型 1.学校有若干系,每个系有若干班级和教研室,每个教研室有若干教师,其有教授和副教授每人各带若干研究生,每个班有若干学生,每个学生选修若干课程,每门课有若干学生选修。 2.某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料组成,不同零件所用的材料可以相同。有些零件按所属的不同产品分别放在仓库,原材料按照类别放在若干仓库
实验5.1 存储过程的建立与使用 一、实验目的 理解存储过程的概念、作用、建立和调用方法。 二、实验原理 使用CREATE PROCEDURE语句创建存储过程,ALTER PROCEDURE语句修改存储过程,DROP PROCEDURE语句删除存储过程,存储过程有不带参数的、有带输入参数的、有带输出参数(output)的,还可以有带返回值的。创建好的存储过程可以使用EXEC procedure_name语句执行。 实验5.2 触发器的建立与使用 一、实验目的 理解触发器的概念和作用;了解触发器的分类及触发条件;掌握触发器的定义及应用。 二、实验原理 1、 使用CREATE TRIGGER语句定义触发器,ALTER TRIGGER语句修改触发器,DROP TRIGGER语句删除触发器。 2、 触发器分AFTER/FOR和INSTEAD OF两种类型:AFTER/FOR类型的触发器是在相应的触发语句(insert、delete、update)执行完后被触发的。如果触发语句对应的表上有完整性约束,这些完整性约束必须不违背时,相应的触发语句才能执行,然后才能触发对应的AFTER/FOR类型的触发器。INSTEAD OF类型的触发器会在触发语句(insert、delete、update)执行之前被触发,并取代相应的触发语句。 3、 在表或视图上,每个INSERT、UPDATE或DELETE语句只能创建一个INSTEAD OF类型的触发器,无法为有外键约束且指定为级联删除或级联修改的表创建DELETE或UPDATE语句上的INSTEAD OF 类型的触发器。 SQL SERVER为每个触发器都创建了两个临时表INSERTED表和DELETED表,这两个表的逻辑结构与被触发器作用的表一样,用户可以读取这两个表的内容,但不能对它们进行修改,触发器执行完后,这两个表也会自动删除。当执行INSERT时,INSERTED表保存要向表插入的所有行;当执行DELETE时,DELETED表保存要从表删除的所有行;当执行UPDATE时,修改前的行保存在DELETED表,修改后的行保存在INSERTED行
以下是JDBC连接MySQL数据库实验报告: 实验目的: 本实验的主要目的是了解JDBC连接MySQL数据库的基本原理,掌握在Java程序使用JDBC连接MySQL数据库的方法。 实验环境: - 操作系统:Windows 10 - 开发工具:Eclipse 2020-06 - 数据库:MySQL 8.0.21 实验步骤: 1. 下载并安装MySQL数据库,并创建一个名为test的数据库。 2. 在Eclipse创建一个Java项目,并在项目添加MySQL的JDBC驱动包。 3. 编写Java代码,建立与MySQL数据库的连接,并实现对数据库的增删改查操作。 下面是建立与MySQL数据库的连接的Java代码: ```java import java.sql.*; public class Main { public static void main(String[] args) { Connection conn = null; try { // 加载数据库驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立数据库连接 String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false"; String user = "root"; String password = "password"; conn = DriverManager.getConnection(url, user, password); // 输出连接成功消息 System.out.println("连接成功!"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭连接 try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 下面是实现增删改查操作的Java代码: ```java import java.sql.*; public class Main { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { // 加载数据库驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立数据库连接 String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false"; String user = "root"; String password = "password"; conn = DriverManager.getConnection(url, user, password); // 创建Statement对象 stmt = conn.createStatement(); // 执行SQL语句 String sql = "insert into user(name, age, sex) values('张三', 20, '男')"; stmt.executeUpdate(sql); sql = "update user set age=21 where name='张三'"; stmt.executeUpdate(sql); sql = "delete from user where name='张三'"; stmt.executeUpdate(sql); sql = "select * from user"; rs = stmt.executeQuery(sql); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String sex = rs.getString("sex"); System.out.println("id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭资源 try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 实验结果: 运行Java程序后,可以看到在控制台输出了连接成功的消息,以及数据库的所有记录,执行顺序为插入一条记录,更新一个记录,删除一条记录,查询所有记录。 实验结论: 通过本次实验,我们可以了解到JDBC连接MySQL数据库的方法,学习了如何使用Java程序对MySQL数据库进行增删改查操作。同时,我们还学习了如何在Eclipse添加MySQL的JDBC驱动包,使程序能够正常连接MySQL数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值