实验名称:SQL Server 2005的安装与系统设置
实验目的和要求:掌握SQL Server 2005的安装和配置方法,熟悉SQL Server的系统环境,主要是对“查询分析器”和“企业管理器”的熟悉和使用。
实验设备:
(1) 操作系统为WINDOWS xp/ 2003 server的计算机一台;
(2) SQL Server 2005标准版安装软件;
实验内容和步骤:
安装SQL Server 2005:将安装光盘放入CD-ROM ,SQL Server 2005的安装光盘共有2张,先打开第一张,点“服务器组件、工具、联机丛书和示例(C)”
此步骤系统配置检查很重要,14个项目里面如果有1项有错误或者警告,整个SQL Server 2005都将不正常。
安装SQL Server 2005:将安装光盘放入CD-ROM,或者从互联网下载SQL Server 2005 开发版安装程序,双击servers目录下的setup.exe程序,按提示进行安装,一般需要人工进行干预的有:
选择安装类型和安装路径:安装类型有:典型安装、最小安装、和自定义安装。安装路径是指SQL Server的系统文件和数据文件的安装位置。默认情况下“安装类型”是典型安装,“安装路径”是操作系统设定的“Program Files”文件夹。你可以自行改变,初次安装最好不要改变他,按默认情况使用;
点击“高级”按钮,可以进行手工选择:
配置启动服务的帐号:有两类用户帐号:一类是与Windows操作系统的集成帐号,一类是混合帐号。选择第一类帐号进行安装;
1. 配置服务器端网络库:SQL Server支持多种网络库,这些网络库必须与操作系统的网络协议共同工作,才能实现客户机与数据库服务器的通信。安装完成后,可以通过操作系统的开始菜单操作:“开始”―》SQL Server”-》“数据库服务器网络配置”进行配置;
2. 配置客户端网络库:客户机要与数据库服务器通信,必须安装有与服务器网络库一样的网络库。可以通过操作系统的开始菜单操作:“开始”―》SQL Server”-》“客户端网络配置”进行配置;
3. 使用SQL Server 2005管理平台(SQL Server Management Studio),它包含了SQL Server 2000企业管理器(Enterprise Manager),以及查询分析器(Query Analyzer)等方面的功能。(1)了解管理器的界面、菜单结构以及各项功能;(2)了解“数据库服务器”的属性配置;(3)了解“数据库”的属性配置;(4)初步了解数据库、表、视图、用户、安全管理,复制等概念;(5)怎样选择不同的数据库;(3)怎样查看数据库的结构;(3)查询分析器的初步使用。
实验思考:
(1) 假如服务器端网络库设置“TCP/IP”协议的端口为:2866,那么在客户端的网络库中应该怎样设置TCP/IP 端口?
(2) 管理平台(SQL Server Management Studio)的作用是什么?
实验名称:SQL数据定义
实验目的和要求:
(1)使用管理平台(SQL Server Management Studio)用CREATE、DROP、ALTER语句创建和删除数据库,创建、删除、更新基本表等。
(2)通过实验,熟练掌握SQL数据定义语言。
(3)认真书写实验报告,如实填写各项实验内容。
实验内容和步骤:
(1)利用管理平台(SQL Server Management Studio)创建学生课程数据库。
用鼠标单击“开始”后,将鼠标分别指向程序/Microsoft SQL server 2005,在Microsoft SQL server 2005下单击SQL Server Management Studio进入管理平台;点击工具栏上的“新建查询”,在右边窗口中键入CREATE DATABASE S_C命令并保存,文件名为s_c.sql。用鼠标单击任务栏的“!执行”按钮运行该命令,这样,S_C数据库就建成了。
(2)利用管理平台创建基本表student(sno,sname,ssex,sage,sdept)、course(cno,cname,ccpno,ccredit)、sc(sno,cno,grade)。在管理平台任务栏的数据库选为S_C。
A.新建查询,在窗体下键入如下命令:
CREATE TABLE Student ( sno CHAR(9) PRIMARY KEY,
sname CHAR(20) UNIQUE,
ssex CHAR(2),
sage SMALLINT,
sdept CHAR(20)
);
然后保存,文件名为student.sql。用鼠标单击任务栏的“!执行”按钮运行该命令。
B.新建查询,在窗体下键入如下命令:
CREATE TABLE Course ( cno CHAR(4) PRIMARY KEY,
cname CHAR(40),
cpno CHAR(4) ,
ccredit SMALLINT,
FOREIGN KEY (cpno) REFERENCES Course(cno)
);
保存,文件名为Course.sql,用鼠标单击任务栏的“!执行”按钮运行该命令。观察结果。
C.新建查询,在窗体下键入如下命令:
CREATE TABLE SC ( sno CHAR(9),
cno CHAR(4),
grade SMALLINT,
PRIMARY KEY (sno,cno),
FOREIGN KEY (sno) REFERENCES Student(sno),
FOREIGN KEY (cno) REFERENCES Course(cno)
);
保存,文件名为sc.sql, 用鼠标单击任务栏的“!执行”按钮运行该命令。
这样在S_C数据库中建成了三个表:Student,Course,SC.
D.在窗口下分别键入DROP TABLE Student及DROP TABLE SC命令, 用鼠标单击任务栏的“!执行”按钮运行该命令,观察结果。
如果先执行DROP TABLE Student 则会出现如下错误:
无法删除对象'Student',因为该对象正由一个FOREIGN KEY 约束引用。
E. 再重新运行student.sql及 sc.sql,观察结果。
(3)利用查询分析器修改student表。
新建查询,在查询分析器窗体下分别键入如下命令:
A.ALTER TABLE Student ADD scome DATETIME;
B.ALTER TABLE Student ALTER COLUMN sdept VARCHAR(20);
C.ALTER TABLE Student DROP COLUMN sage;
运行并观察结果。
(4)利用管理平台(SQL Server Management Studio)向表中输入数据。右键单击student表,点击“打开表”, 向表中输入数据。用相同的方法向Course、sc表输入数据。
实验名称:SQL数据查询
实验目的和要求:
(1)使用SQL查询分析器用SELECT语句进行单表的数据查询,分别使用以下方法,掌握单表的各种查询方法:
A.选择表中的若干元组
B. 消除取值重复的行
C. 查询满足单条件和多重条件的元组
D.使用通配符(%和_ )
E.对查询结果排序和分组
F.使用聚合函数
(2)使用SQL查询分析器用SELECT语句进行多表的数据查询,分别使用以下方法,目的是掌握多表的各种查询方法和嵌套查询方法:
A.使用连接、多条件等:选择多表中的若干元组
B. 使用单表自身连接。
C. 使用嵌套连接。
D.使用带有各种谓词的子查询。
E.使用集合查询。
(3)通过实验,掌握上述查询方法。
(4)认真书写实验报告,如实填写各项实验内容。
实验内容和步骤:
1.用实验1的方法创建数据库、表,输入数据。
2.在管理平台(SQL Server Management Studio)下,新建查询,用SELECT语句完成下列单表查询:
(1) 查询全体学生的详细记录;
SELECT *
FROM Student,Course,SC;
(2) 查询考试成绩不及格的学生的学号;
SELECT sno
FROM SC
WHERE grade<60;
(3) 查信息系(IS)、数学系(MA)和计算机科学系(CS)的学生的姓名和性别;
SELECT sname,ssex
FROM Student
WHERE sdept='IS' OR sdept='CS' OR sdept='MA';
(4) 查所有姓刘的学生的姓名、学号和性别;
SELECT sname,sno,ssex
FROM Student
WHERE sname LIKE '刘%';
(5) 查 DB_Design 课程的课程号和学分;
SELECT cno,ccredit
FROM Course
WHERE cname='DB_Design';
(6) 查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列;
SELECT sno,grade
FROM SC
WHERE cno='3'
ORDER BY grade DESC;
(7) 查询学习1号课程的学生最高分数;
SELECT MAX(grade)
FROM SC
WHERE cno='1' ;
(8) 查询学号为“05001”的学生选修了多少门课程。
SELECT count(cno)
FROM SC
WHERE sno='05001';
(9) 查询所有学生选修的课程门数。
SELECT count(cno)
FROM SC,Student
WHERE SC.sno=Student.sno;
3.在管理平台(SQL Server Management Studio)查询窗口下用SELECT语句完成下列多表查询:
(1) 查询每个学生及其选修课程的情况。
SELECT Student.sno,SC.cno
FROM SC,Student
WHERE SC.sno=Student.sno;
(2) 查询选修2号课程且成绩在90分以上的所有学生的学号、姓名。
SELECT Student.sno,sname
FROM SC,Student
WHERE SC.sno=Student.sno AND cno='2' AND grade>90 ;
(3) 查询每一门课的间接先修课(即先修课的先修课)。
(4) 使用嵌套查询:查询其他系中比信息系任意一个(其中某一个)学生年龄小的学生姓名和年龄。
SELECT sname,sage
FROM Student
WHERE sdept='MA' OR sdept='CS' OR sdept='TU'
GROUP BY sname,sage
HAVING sage 'IS';
(5) 使用带有EXISTS谓词的子查询:查询所有选修了1号课程的学生姓名。
SELECT sname
FROM Student,SC
WHERE SC.sno=Student.sno AND cno='1';
SELECT sname
FROM Student
WHERE EXISTS(SELECT *
FROM SC
WHERE sno=Student.sno AND cno='1');
(6) 查询选修了全部课程的学生姓名。
SELECT sname
FROM Student
WHERE NOT EXISTS (SELECT *
FROM Course
WHERE NOT EXISTS(SELECT *
FROM SC
WHERE sno=Student.sno AND cno=Course.cno ));
(7) 使用集合查询:查询选修了课程1或者选修了课程2的学生。
(SELECT sname
FROM Student,SC
WHERE SC.sno=Student.sno AND cno='1')
UNION
(SELECT sname
FROM Student,SC
WHERE SC.sno=Student.sno AND cno='2');
实验步骤略。
提示:
SELECT语句的一般格式为:
SELECT〈列名〉[{,〈列名〉}]
FROM〈表名或视图名〉[{,〈表名或视图名〉}]
[WHERE〈检索条件〉]
[GROUP BY <列名1>[HAVING <条件表达式>]]
[ORDER BY <列名2>[ASC|DESC]];
实验名称:SQL数据更新
实验目的和要求:
(1)使用SQL查询分析器用INSERT、UPDATE、DELETE语句进行数据更新。
(2)通过实验,掌握使用SQL语言对数据更新的方法。
(3)认真书写实验报告,如实填写各项实验内容。
实验内容和步骤:
(1)利用查询分析器用INSERT语句向表中插入数据。
A.将一个新学生记录(学号:95020;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
INSERT Student
VALUES (95020,'陈冬','男',18,'IS');
B.对每一个系,求学生的平均年龄,并把结果存入数据库。
CREATE TABLE AVG_sage(
sdept CHAR(20),
avg_sage REAL);
INSERT AVG_sage
SELECT sdept,AVG(sage)
FROM Student
WHERE sdept IN (SELECT sdept FROM Student )
GROUP BY sdept;
C.另建一个学生表Student_1,其结构与Student表结构一样,在Student_1表中输入元组。然后,把Student_1表的内容插入到Student表中。
CREATE TABLE Student_1 ( sno CHAR(9) PRIMARY KEY,
sname CHAR(20) UNIQUE,
ssex CHAR(2),
sage SMALLINT,
sdept CHAR(20)
);
INSERT INTO Student
TABLE Student_1;(结果不对!)(课本的语句错误)
INSERT INTO Student
SELECT Student_1.*
FROM Student_1;
分别运行,观察结果。
(2)利用查询分析器用UPDATE语句更改表中数据。
A.将学生05001的年龄改为22岁。
UPDATE Student
SET sage=22
WHERE sno=05001;
B.将所有学生的年龄增加1岁。
UPDATE Student
SET sage=sage+1;
(7 行受影响)
C.将计算机科学系全体学生的成绩置零。
UPDATE SC
SET grade=0
WHERE sno IN (SELECT SC.sno
FROM Student,SC
WHERE Student.sno=SC.sno AND sdept='CS');
分别运行,观察结果。
(3)利用查询分析器用DELETE语句删除表中数据。
A.删除学号为95019的学生记录。
设置了Student、SC中同时含有95019学号记录的情况:
错误实例:
DELETE FROM * 或者 Student,SC
WHERE sno='95019'
(注意:DELETE语句只能从一个基本表中删除数据)
DELETE FROM Student
WHERE sno='95019'
DELETE FROM SC
WHERE sno='95019';
DELETE 语句与REFERENCE 约束"FK__SC__sno__03317E3D"冲突。该冲突发生于数据库"S_C",表"dbo.SC", column 'sno'。
语句已终止。
(1 行受影响)
因为忽略了主外键的依赖关系,此种删除顺序使得只删除了SC表中的记录,Student表的没有删掉。
DELETE FROM SC
WHERE sno='95019'
DELETE FROM Student
WHERE sno='95019';
B.删除所有的学生选课记录。
DELETE FROM SC;
C.删除计算机科学系所有学生的选课记录。
DELETE FROM SC
WHERE sno IN (SELECT SC.sno
FROM Student,SC
WHERE SC.sno=Student.sno AND sdept='CS');
分别运行,观察结果。
实验步骤略。
提示:
数据插入格式:
(1)单元组的插入
INSERT INTO 基本表名 [(列名表)] VALUES(元组值)
(2)子查询结果的插入
INSERT INTO 基本表名 [(列名表)]<SELECT查询语句>
数据修改格式:
UPDATE 基本表名
SET 列名=值表达式[,列名=值表达式…]
[WHERE 条件表达式]
数据删除格式:
DELETE FROM基本表名
[WHERE 条件表达式]
实验名称:SQL的视图操作
实验目的和要求:
(1)使用SQL查询分析器用CREATE、DROP语句创建和删除视图,使用INSERT、UPDATE、DELETE语句更新视图。
(2)通过实验,掌握使用SQL语言对SQL的视图操作的方法。
(3)认真书写实验报告,如实填写各项实验内容。
实验内容和步骤:
(1)用查询分析器用CREATE语句建立视图:
对于教学数据库中基本表S、SC、C,用户经常要用到Sno、SNAME、CNAME和GRADE等列的数据,那么可用下列语句建立视图:
CREATE VIEW STUDENT_GRADE as
select STUDENT.Sno,SNAME,CNAME,GRADE from STUDENT,sc,course where STUDENT.sno=sc.sno and sc.cno=course.cno
(2)利用查询分析器用INSERT、UPDATE、DELETE语句更新该视图。
(3)撤销STUDENT_GRADE视图。
(4)建立其他视图。
运行并观察结果。
实验步骤略。
思考题:什么情况下才能对视图作更新操作?
提示:
视图的创建, 创建视图可用“CREATE VIEW”语句实现。其句法如下:
CREATE VIEW <视图名>(列表名)
AS
视图的撤销
在视图不需要时,可以用“DROP VIEW”语句把其从系统中撤销。其句法如下:DROP VIEW 视图名
视图的更新语句与基本表的更新语句是一样的。
(1) 若视图是基于多个表使用联接操作而导出的,那么对这个视图执行更新操作时,每次只能影响其中的一个表。
(2) 若视图导出时包含有分组和聚合操作,则不允许对这个视图执行更新操作。
(3) 若视图是从一个表经选择、投影而导出的,并在视图中包含了表的主键字或某个候选键,这类视图称为‘行列子集视图’。对这类视图可执行更新操作。
定义可更新视图时加上WITH CHECK OPTION短语,表示强制在视图上的所有数据更新语句都必须符合由select查询语句所设置的准则。
由于视图不一定包括表中的所有字段,所以在插入记录时可能会遇到问题。视图中那些没有出现的字段无法显式插入数据,假如这些字段不接受系统指派的null值,那么插入操作将失败。但这类视图仍然可以用于修改和删除操作。