数据库实验指导书+实验报告(2015)

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/snsdzjlz/article/details/46844497

预备实验(选做)

实验名称:SQL Server 2005的安装与系统设置

 

实验目的和要求:掌握SQL Server 2005的安装和配置方法,熟悉SQL Server的系统环境,主要是对“查询分析器”和“企业管理器”的熟悉和使用。

实验设备:

(1) 操作系统为WINDOWS xp/ 2003 server的计算机一台;

(2) SQL Server 2005标准版安装软件;

实验内容和步骤:

安装SQL Server 2005:将安装光盘放入CDROM ,SQL Server 2005的安装光盘共有2张,先打开第一张,点“服务器组件、工具、联机丛书和示例(C)

         

                                                          

                                                      

                                           

此步骤系统配置检查很重要,14个项目里面如果有1项有错误或者警告,整个SQL Server 2005都将不正常。

 

安装SQL Server 2005:将安装光盘放入CDROM,或者从互联网下载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数据定义

实验名称: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数据查询

实验名称: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 <ANY(SELECT sage
                  FROM Student
                  WHERE sdept='IS');                     
SELECT sname,sage
FROM Student
WHERE sage < ANY(SELECT sage
                 FROM Student
                  WHERE sdept='IS') AND sdept<>'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数据更新

实验名称: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的视图操作

实验名称: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 <SELECT 查询语句>

 

视图的撤销

在视图不需要时,可以用“DROP VIEW”语句把其从系统中撤销。其句法如下:DROP VIEW 视图名

 

视图的更新语句与基本表的更新语句是一样的。

 

(1) 若视图是基于多个表使用联接操作而导出的,那么对这个视图执行更新操作时,每次只能影响其中的一个表。

(2) 若视图导出时包含有分组和聚合操作,则不允许对这个视图执行更新操作。

(3) 若视图是从一个表经选择、投影而导出的,并在视图中包含了表的主键字或某个候选键,这类视图称为‘行列子集视图’。对这类视图可执行更新操作。

定义可更新视图时加上WITH CHECK OPTION短语,表示强制在视图上的所有数据更新语句都必须符合由select查询语句所设置的准则。

由于视图不一定包括表中的所有字段,所以在插入记录时可能会遇到问题。视图中那些没有出现的字段无法显式插入数据,假如这些字段不接受系统指派的null值,那么插入操作将失败。但这类视图仍然可以用于修改和删除操作。

 

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页