SQL语言是数据库学习的重点之一,也是学生将来从事数据库编程的基础。通过实验的学习,使学生使用一种支持三级模式的RDBMS,用SQL语言完成下述操作:
- 建立基本表及视图;
- 在基本表上作数据加载;
- 在基本表上作各类查询;
- 对基本表和满足一定条件的视图作存储操作;
- 实现数据的完整性约束。
为了加深学生对关系数据库概念的理解,也为将来使用大型的RDBMS打下基础,建议使用比较正规的RDBMS,例如:Oracle,Informix,Sybase,Rdb等。
本实验指导书使用的是SQL Server 2000。之所以选者它,是因为:
- SQL Server 2000是Microsoft公司推出的一大型关系型DBMS;
- SQL Server 2000能安装在windows98/2000上,方便实践;
- SQL Server 2000的Query Analyzer组建能运行全部的SQL语句。
教材中介绍的SQL语言是标准的SQL语言,而每一个数据库厂家所使用的SQL语言,在标准SQL基础上都进行了扩充。SQL Server使用的SQL语言又叫作Transaction—SQL(事务SQL,简称T—SQL),在具体的SQL语句的细节上,与标准SQL略有不同。建议同学们在上机前,仔细阅读本指导书。(本实验指导书使用的是SQL Server 2000)
实验一 安装和了解SQL Server 2000
实验二 创建SQL Server数据库和表
实验三 基本表的建立和修改
实验四 SELECT 语句的使用(一)
实验五 SELECT 语句的使用(二)
实验六 SQL的存储操作
实验七 视图的建立及操作
实验八* 完整性约束的实现
实验一 安装和了解SQL Server 2000
一、实验目的
学会安装SQL Server 2000,能运行SQL Server 2000,了解其组成部件的功能。
二、实验准备
安装前,首先要了解SQL Server 2000的各种版本和支持它的操作系统版本,检查计算机的软件和硬件,保证能满足安装的最小需求。
1.版本及软硬件要求
版本名 |
操作系统平台 |
内存要求 |
企业版 |
Microsoft Windows 2000 Server
Microsoft Windows 2000 Advanced Server
Windows NT Server 4.0(SP5)或更高版本 |
64MB
建议128MB |
标准版 |
Microsoft Windows 2000 Professional
Windows NT Workstation 4.0(SP5)或更高版本 |
64MB |
个人版 |
Windows NT Workstation
Windows9X/Me/2000或更高版本 |
32MB |
2.安装SQL Server
实验的主要目的是使学生掌握SQL语句的使用。下面的安装过程将以在Windows 2000环境下从本地CD-ROM上安装SQL Server 2000个人版为例。
具体步骤为:
- 插入SQL Server个人版光盘。
- 在屏幕上,选择“安装SQL Server 2000组件”选项,选择“安装数据库服务器”。
- 接着出现SQL Server 2000的安装向导,它将引导用户安装SQL Server的新实例或修改现有实例。实例名必须以字母或符号(&)或下划线(_)开头,可以包含数字、字母或其他字符。SQL Server系统名称和保留名称不能用作实例名称。
- 接下来,系统将询问用户是否同意软件协议、收集有关用户、用户的计算机和用户公司等情况,并需要键入用户的CD KEY。
- 接着是选择“安装类型”
- 进入到服务器账户配置界面,账户的选择和配置是一个非常重要的步骤,应为它直接决定了SQL Server的启动账号和访问账号。
- 进入身份验证模式界面,在选择身份模式时,为方便配置,建议用户均采用“混合模式”。
- 点击“下一步”按钮后进入文件复制阶段。SQL Server安装向导便开始拷贝文件。
重新启动服务器,SQL Server安装完成。
3.SQL Server的组成
正确安装SQL Server2000后,可以在windows的“开始”菜单中看到“Microsoft SQL Server”组。下面对实验中常用的几个工具介绍。
1)服务器管理(Service Manager)
服务器管理用来启动、暂停、停止MS SQL Server服务、SQL Server Agent服务、MS DTC服务以及Microsoft Search服务,是SQL Server的一个必要组成部分。这些服务一般作为应用程序在服务器的后台运行。实验中,我们只是用MS SQL Server服务
服务器有三个不同状态:
- 开始/继续(Started/Continue)——这种服务状态表示服务正在正常运行。当MS SQL Server服务处于这种状态时,服务器课接受用户连接并处理数据。
- 停止(Stopped)——当MS SQL Server服务处于这种状态时,任何连接到服务器上的客户连接都会被断开,并且他们所有的过程都将终止。在此种状态的其他服务和处理会被中断。
- 暂停(Paused)——这种状态只对MS SQL Server服务有效。当MS SQL Server服务暂停时,以连接到服务器上的用户将被允许继续保持连接,但新的用户连接将被拒绝。
在我们的实验中将使用MS SQL Server服务,他实际上是数据库服务器,当用户要访问数据库时,必须先启动它。
2)企业管理器(Enterprise Manager)
它是SQL Server中用户用得最多的一个工具,也是SQL Server提供的用户管理界面。在这里,用户可以以图形化方式管理所能访问的全部SQL服务器,包括数据库(Database)、数据装换服务(Data Transformation Services)、管理(Managerment)、安全(Security)等管理
3)查询分析器(Query Analyzer)
SQL Server Query Analyzer是用来管理服务器的一个工具。与企业管理器不同,使用该工具时,必须键入SQL命令和SQL脚本程序。但与企业管理器相比,允许用户对DBMS用更多的控制。
4)运行SQL Server
a、启动MS SQL Server服务
操作:开始→MS SQL Server→服务管理器→开始/继续
b、关闭“服务管理器”窗口,打开“企业管理器”。
操作:开始→MS SQL Server→企业管理器。
实验二 创建SQL Server数据库和表
一、实验目的
通过实验使学生了解SQL Server系统数据库和用户数据库,掌握SQL Server数据库的创建方法和数据库对象,了解SQL Server2000的数据类型,掌握创建SQL Server表的方法。
二、实验准备
1、了解SQL Server数据库的结构
在SQL Server中,所有信息都存储在数据库中。每个数据库都由物理和逻辑组件两部分组成。逻辑组件是用户在使用SQL Server图形操作界面看到的,或在程序中访问的数据和数据对象。比如:数据库名和表名、视图名、存储过程名等数据库对象。而数据库的物理组件——文件,对用户是透明的,一般只用系统管理员才直接对数据库文件进行操作。
每个数据文件由以下三种组成:
- 主数据文件(文件名后缀:.mdf)。该文件时数据库的基础,每个数据库有且仅有一个主要数据文件。
- 次要数据文件(文件名后缀:.ndf)。该文件存储着主数据文件没有包括的内容。它不是每个数据库都必须的。简单的数据库可以没有次要数据文件,复杂数据库可以有多个次要数据文件。
- 日志文件(文件名后缀:.ldf)。日志文件记录着事务日志信息,每个数据库必须至少有一个日志文件。
2、了解SQL Server的四个系统数据库及其作用
四个系统数据库为:Master、Model、Tempdb、Msdb,它们是正常运行SQL Server所必需的,不能删除和随意修改。其中:
- Master:是SQL Server的主数据库,保存着SQL Server所有的系统的信息,包括登录信息,所有的系统配置信息。它还记录着所有用户数据库和主数据文件的位置,确保用户数据库的初始化。
- Model:是创建新数据库的模版数据库。当用户新建数据库时,首先将model数据库拷贝到新数据库中。Model数据库可以自定义,任何对model数据库的修改,都将在新建数据库时体现出来。
- Tempdb:临时数据库,为临时表和其他临时工作提供一个临时的存储区。每次打开SQL Server,tempdb数据库都会重建。
- Msdb:是SQL Server Agent的主要数据库,用于复制、任务调度、报警、系统操作员信息以及备份信息。
3、了解SQL Server的两个示例数据库
两个示例数据库为:Pubs数据库和Northwind数据库,是微软为学习SQL Server的用户准备的例子数据库。熟练的用户可以删除这两个数据库。
三、实验内容
- 启动MS SQL Server服务,打开“企业管理器”。
- 单击“企业管理器”左边“控制台根目录”树结构中的SQL Server Group(服务组)使其展开;再展开服务组下面的SQL Server服务器。
- 展开“数据库”,用户可见SQL Server自带的两个四个系统数据库和两个示例数据库。
- 在“企业管理器”中创建名为GradeManager的数据库。
实验步骤:
- 选中“数据库”,单击鼠标右键,在其弹出菜单中选择“新建数据库”。
- 在随后出现的“新建数据库”对话框的“名称”一栏中,输入数据库名:GradeManager,也可通过“新建数据库”对话框更改该数据库文件的存放路径。
- 展开新建的数据库,会发现数据库中已有了一下目录结构,称之为数据库对象。
关系图(Digram)
表(Table)
视图(View)
存储过程(Stored Procedure)
用户(User)
角色(Role)
规则(Ruler)
默认(Default)
用户定义的数据类型(User Defined Data Type)
用户定义的函数(Function)
打开“查询分析器”。
在“查询分析器”的工具栏中的数据库下拉选择框中,选中GradeManager,使之成为当前操作的数据库,在编辑框中键入下列SQL语句,创建表:
Create table worker
(wno char(4) primary key,
wname char(8) not null,
sex char(2) not null,
birthday datetime)
- 按编辑框上方图形菜单中的绿色按钮,执行编辑框中的SQL语句。
- 清空上面的SQL语句,然后输入:
select * from worker
- 按编辑框上方图形菜单中的绿色箭头按钮,执行select语句,结果为空。
- 在“企业管理器”中展开数据库→展开GradeManager数据库→选中Table,右击鼠标→选择刷新,可见右边出现新建的worker表。
- 选中worker表,右击鼠标→打开表,可见worker表中记录为空。
四、实习报告内容
(1)写出在“企业管理器”中的一般步骤;
(2)写出在“查询分析器”中创建表的一般步骤。
五、思考题
(1)SQL Server的数据库文件有几种?后缀名分别是什么?
(2)SQL Server 2000中,有哪几种整型数据类型?占用的存储空间多大?
实验三 基本表的建立和修改
一、实验目的
通过建立基本表和向表中输入记录,加深学生对关系数据模型中型和值概念的理解;学会对基本表进行修改、删除和建立索引等基本操作。
二、实验准备
- 复习理论课中基本表、索引的创建、删除和修改操作;
- 复习Create table、Create Index、Alter table 、Drop table等命令;
- 复习Insert 、Update 、Delete命令的使用;
- 创建student、course、class、grade基本表。
student (sno, sname, ssex, sage, clno)??
course (cno, cname, credit)
class (clno, speciality, inyear, number, monitor)
grade (sno, cno, gmark)
三、实验内容
- 启动MSSQL Server服务,打开Enterprise Manager 和 Query Analyzer。
- 在Query Analyzer 中用CREATE TABLE 命令在实验一创建的GradeManager数据库中定义基本表:学生表(Student)、课程表(Course),利用Enterprise Manager 的图形化功能建立班级(Class)以及成绩表(Grade)。
- 给学生表增加一属性Nation(民族),数据类型为varchar(20)
- 删除学生表中新增的属性nation;
- 想成绩表中插入记录(”200101”,”3”,80);
- 修改学号为“2001110”的学生的成绩为70分;
- 删除学号为“2001110”的学生成绩记录;
- 为学生表创建一个名为IX_Class的索引,以班级号排序;
- 删除IX_Class索引;
四、实验报告内容
- 写出用CREATE TABLE 语句对四个基本表的定义;
- 写出各项操作的SQL语句。
五、思考题
在定义基本表语句时,NOT NULL参数的使用有何作用?
实验四 SELECT 语句的使用(一)
一、实验目的
掌握SELECT的基本使用格式,能使用SQL Server对表的简单查询。
二、实验准备
- 复习理论课中SELECT语句的基本使用格式。
- 复习SQL中五种库函数:AVG、SUM、MAX、MIN、COUNT。
三、实验内容
- 找出所有被学生选修了的课程号;
- 找出01311班女学生的个人信息;
- 找出01311、01312班学生的姓名、性别、出生年份;
- 找出所有性李的学生的个人信息;
- 找出学生李勇所在班级的学生人数;
- 找出课程名为操作系统的平均成绩、最高分、最低分;
- 找出选修了课程的学生人数;
- 找出选修了课程操作系统的学生人数;
- 找出2000级计算机软件班的成绩为空的学生姓名
- 试一下以下语句是否正确:
SELECT eno , basepay , service
FROM salary
WHERE basepay<AVG(basepay)
四、实验报告内容
- 写出各项操作的SQL语句。
- 实验内容二的SQL语句是否正确?如果不正确,请写出正确的语句。
五、思考题
什么情况下需要使用关系别名?别名的作用范围是什么?
实验五 SELECT 语句的使用(二)
一、实验目的
掌握SELECT 语句的嵌套使用方法,能使用SQL Server对表的复杂查询。
二、实验准备
- 复习理论中SELECT语句的较高级格式的使用。
- 了解库函数在分组查询中的使用规则;
三、实验内容
- 找出李勇所在勇一个班级的学生信息;
- 找出所有以学生李勇有相同选修课程的学生信息;
- 找出年龄介于学生李勇和25岁之间的学生信息;
- 找出选修了课程操作系统的学生学号和姓名;
- 找出所有没有选1号课程的学生姓名;
- 找出选修了全部课程的学生姓名;
- 查询选修了3号课程的学生学号及其成绩,并按成绩降序排列;
- 查询全体学生信息,要求查询结构按班级号升序排列,同一班级学生按年龄降序排列;
- 求每个课程号及相应的学课人数;
查询选修了3门以上课程的学社学号;
四、实验报告内容
- 写出各项操作的SQL语句。
- 使用存在量词[NOT]EXISTS的嵌套查询时,何时外层查询的WHERE条件为真,何时为假。
五、思考题
- 用UNION或UNION ALL将两个SELECT命令结合为一个时,结果有何不同?
- 当既能用连接词查询又能用嵌套查询时,应该选择哪种查询较好?为什么?
- 库函数能否直接使用在:SELECT选取目标、HAVING子句、WHERE子句、GROUP BY列名中?
实验六 SQL的存储操作
一、实验目的
掌握用交互式SQL语句对已建基本表进行存储操作:修改、删除、插入,加深对数据库的完整性的理解。
二、实验准备
- 复习数据的完整性,在进行数据的修改、删除、插入时,要注意保持数据的一致性。
- 复习UPDATE、DELETE、INSERT语句与子查询的结合使用。
三、实验内容
- 对每个班,求学生的平均年龄,并把结果存入数据库;
- 将01311班的全体学生的成绩置零;
- 删除2001击计算机软件班全体学生的选课记录;
- 学生李勇已退学,从数据库中删除有关它的记录;
- 把所有工程师的基本工资(Basepay)增加100,试一试以下的UPDATE语句对不对;
UPDATE salary
SET basepay=basepay+100
WHERE eno in
(SELECT eno
FROM employee
WHERE title =‘工程师')
四、实验报告内容
- 写出各项操作的SQL语句。
- 实验内容的SQL语句是否正确?如果不正确,请写出正确的语句表达式。
五、思考题
DROP命令和DELETE命令的本质区别是什么?
实验七 视图的建立及操作
一、实验目的
掌握创建、删除和查询视图的方法,验证可更新视图和不可更新视图。
二、实验准备
1.复习视图。
2.了解可更新视图和不可更新视图。
三、实验内容
-
建立01312班选修了1号课程的学生视图stu_01312_1;
建立01312班选修了1号课程并且成绩不及格的学生视图stu_01312_2;
建立视图stu_year,由学生学号、姓名、出生年月组成;
查询1983年以后出生的学生姓名;
查询01312班选修了1号课程并且成绩不及格的学生学号、姓名、出生年月。
建立一视图Class_grade,用来反映每个班级的所有选修课的平均成绩,并对其进行更新操作。
四、实验报告内容
- 写出各项操作的SQL语句。
- 实验内容二创建的视图能否进行更新?为什么?
实验八* 完整性约束的实现
一、实验目的
掌握SQL中实现数据完整性的方法,加深理解关系数据模型的三类完整性约束。
二、实验准备
复习 “完整性约束SQL定义”。
了解SQL Server 中实体完整性、参照完整性和用户自定义完整性的实现手段。
三、实验内容
用完整性约束定义四个表:
表一 student
属性名 |
数据类型 |
可否为空 |
含义 |
完整性约束 |
Sno |
Char(7) |
否 |
学号 |
主码 |
Sname |
Varchar(20) |
否 |
学生姓名 |
|
Ssex |
Char(2) |
否 |
性别 |
男或女,默认为男 |
Sage |
Smallint |
可 |
年龄 |
大于14,小于65 |
Clno |
Char(5) |
否 |
学生班级 |
外部码 |
表二course
属性名 |
数据类型 |
可否为空 |
含义 |
完整性约束 |
Cno |
Char(1) |
否 |
课程号 |
主码 |
Cnam |
Varchar(20) |
否 |
课程名称 |
|
credit |
Smallint |
可 |
学分 |
1、2、3、4、5、6之一 |
表三class
属性名 |
数据类型 |
可否为空 |
含义 |
完整性约束 |
Clno |
Char(5) |
否 |
班级号 |
主码 |
Speciality |
Varchar(20) |
否 |
班级所在专业 |
|
Inyear |
Char(4) |
否 |
入校年份 |
|
Number |
Integer |
可 |
班级人数 |
小于1,小于100 |
Monitor |
Char(7) |
可 |
班长学号 |
外部码 |
表四grade
属性名 |
数据类型 |
可否为空 |
含义 |
完整性约束 |
Sno |
Char(7) |
否 |
学号 |
主属性,外部码 |
Cno |
Char(7) |
否 |
课程号 |
主属性,外部码 |
Gmark |
Numeric(4,1) |
可 |
成绩 |
大于0,小于100 |
四、实验报告内容
写出习题二第20题中四个表结构的SQL定义语句。
SQL Server中提供了哪些方法实现实体完整性、参照完整性和用户自定义完整性?