数据库上机实验报告sql server 20xx

课程代码1010000450

数据库

Database

学分:3  总学时:48  实验学时:16

面向专业:信息与计算科学,数学与应用数学

一、实验教学目标

数据库是计算机科学与技术专业的专业必修课程。课程内容主要包括:数据模型、关系代数、关系数据库标准语言SQL、关系系统、关系数据理论、数据库设计方法。学习本课程的过程中,只有通过上机实验,才能使学生真正深层次了解数据库系统的体系结构,掌握数据库系统的基础理论、技术和方法,掌握主流数据库管理系统SQL Server 2000的应用技术及数据库应用系统的设计、开发能力。

二、实验教学基本要求

认真阅读教材中与实验相关的章节内容,提前做好实验准备,做到在每个实验前明确实验目的、掌握实验的基本内容及操作方法;在实验中正确使用实验设备,认真观察、分析实验结果;实验后要根据要求做好总结,写出实验报告。

三、实验教材或实验指导书

《数据库系统概论》,萨师煊 王珊主编,高等教育出版社

四、考核方式与评分办法 

实验成绩评定分两部分:上机实验操作占50%,实验报告占50%。

五、实验项目设置

六、实验内容与实验方式

实验一  安装SQL Server 2000                                                             

(一)实验内容

1.安装Microsoft的数据库服务软件SQL Server 2000。

以sql server2000企业版为例安装教程

第一步:打开安装文件中的“AUTORUN”文件,安装程序会自动运行出现版本选择界面,我们以选择企业版为例。

第二步:在接下来的界面中选择“安装数据库服务器”选项。

第三步:这时出现安装向导,出现“计算机名”窗口。“本地计算机”是默认选项,其名称就显示在上面,我们按其默认点“下一步”。

第四步:接下来,在“安装选择”对话窗口中,同样按其默认项“创建新的SQL Server实例,或安装客户端工具”点下一步。

第五步:在 "用户信息" 窗口,输入用户信息,并接受软件许可证协议。

第六步:在 "安装定义"窗口,选择 "服务器和客户端工具" 选项进行安装。我们需要将服务器和客户端同时安装,这样在同一台机器上,我们可以完成相关的所有操作,对于我们学习SQL Server很有用处。如果你已经在其它机器上安装了SQL Server,则可以只安装客户端工具,用于对其它机器上SQL Server的存取。

第七步:在 "实例名" 窗口,选择 "默认" 的实例名称。这时本SQL Server的名称将和Windows 2000服务器的名称相同。

第八步:在 "安装类型" 窗口,选择 "典型" 安装选项,并指定 "目的文件夹"。

第九步:在 "服务账号" 窗口,请选择 "对每个服务使用统一账户..." 的选项。在 "服务设置" 处,选择 "使用本地系统账户"。如果需要 "使用域用户账户" 的话,请将该用户添加至Windows Server的本机管理员组中。

第十步:在 "身份验证模式" 窗口,请选择 "混合模式..." 选项,并设置管理员"sa"账号的密码。如果需要更高的安全性,则可以选择 "Windows身份验证模式" ,这时就只有Windows Server的本地用户和域用户才能使用SQL Server了。

第十一步:在 "选择许可模式" 窗口,根据您购买的类型和数量输入(0表示没有数量限制)。 "每客户"表示同一时间最多允许的连接数,"处理器许可证"表示该服务器最多能安装多少个CPU。笔者这里选择了 "每客户" 并输入了100作为示例。

第十二步:约10多分钟的安装时间,然后打开开始菜单下的sql子目录下的企业管理器。

2.熟悉软件的使用以及各个组成部分。

第一:打开企业管理器,可以对本地的数据进行管理,也可以登录服务器端,即可以远程操作自己的数据库 ;

第二:登录查询分析器,可以通过sql管理语句,对数据库进行管理。

(二)实验方式与分组要求

老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。

实验二  启动SQL Server2000和建库、表                                                              

(一)实验内容

1.启动数据库服务软件SQL Server 2000。

第一步:打开企业管理器,可以登录服务器端,即可以远程操作自己的数据库,登录步骤如下;

第二步:左侧方框中控制台根目录的子目录的SQL server组上,右击,并新建SQL server注册…;

第三步:在“服务器”一栏里输入想要登录的服务器ip地址,选择使用SQL server身份验证,写入登录名和密码,就可以登录了。

第四步:登录查询分析器,可以通过sql管理语句,对数据库进行管理。

2.在SQL Server 2000中建立数据库。

第一步:通过企业管理器进入服务器端以后,可以在数据库文件里“新建数据库”。

第二步:输入数据库名称。

第三步:通过相关需求对数据库的相关属性进行设置,然后完成。

3.在数据库上建立表。

第一步:登录企业管理器

第二步:进入自己的database,并打开“表”选项;

第三步:在表选项右侧空白处,点击右键,选择“新建表…”;

第四步:在弹出的窗口中,分别填写列名,数据类型,长度和是否允许空值,然后关闭窗口。

第五步:关闭窗口会弹出是否保存表,选择是,接下来弹出的窗口中填写表名即可。

(二)实验方式与分组要求

老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。

实验三  SQL Server2000查询分析器                                                             

(一)实验内容

1.启动数据库服务软件SQL Server 2000的查询分析器。

第一步:在登录企业管理器的前提下,登录查询分析器。

第二步:登录查询分析器与登录企业管理器类似,需要输入ip地址或者如果是本地数据库,直接用windows身份验证即可。

2.在查询分析器中建立表。

第一步:在查询分析器命令栏里输入以下语句:

定义一个学生-课程模式S-T

            CREATE SCHEMA “S-T” AUTHORIZATION WANG

             /*为用户WANG定义了一个模式S-T*/

然后点击“分析查询”和“执行查询”。

第二步:在查询分析器命令栏里输入以下语句:

建立“学生”表Student,学号是主码,姓名取值唯一

CREATE TABLE Student         

             (Sno   CHAR(9) PRIMARY KEY, /* 列级完整性约束条件*/                 

            Sname  CHAR(20) UNIQUE,    /* Sname取唯一值*/

            Ssex    CHAR(2),

            Sage   SMALLINT,

            Sdept  CHAR(20)

           );

然后点击“分析查询”和“执行查询”。

(二)实验方式与分组要求

老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。

实验四  SQL语言的DDL                                                             

(一)实验内容

1.用如下语句对表进行操作:Create Table     建表;Drop Table  删除表;Alter Table  更改表。

CREATE TABLE  Student

               ( Sno CHAR(4) PRIMARY KEY)

DROP TABLE  Student /*当Student表与其他数据有级联关系或者其他关系时,不能删除。*/

ALTER TABLE Student ADD S_entrance DATE NULL/*向Student表增加“入学时间”列,其数据类型为日期型*/

ALTER TABLE Student DROP COLUMN Sno /*删除Student表中的Sno这一列,含有以下关系的列不能被删除:

· 被复制列。

· 用在索引中的列。

· 用在 CHECK、FOREIGN KEY、UNIQUE 或 PRIMARY KEY 约束中的列。

· 有相关联的默认值(由 DEFAULT 关键字定义)的列,或绑定到默认对象的列。

· 绑定到规则的列。  */

2.用如下语句对视图进行操作:Create View  建视图;Drop View  删除视图。

/*创建一个IS_Student视图,视图中返回来自于表Student中Sdept=’IS’的所有学生的Sno,Sname,Sage列*/

CREATE VIEW IS_Student     

       AS

           SELECT Sno,Sname,Sage

           FROM  Student

           WHERE Sdept='IS'

/*删除IS_Student视图*/

drop VIEW IS_Student

3.如下语句对索引进行操作:Create Index 建立索引;Drop Index  删除索引。

/*创建一个Stusname索引,在Student 表中以Sname列升序排列*/

CREATE CLUSTERED INDEX Stusname

           ON  Student(Sname)

/*删除Student表中的Stusname索引*/

DROP INDEX Student.Stusname

(二)实验方式与分组要求

老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。

实验五  SQL语言的DML                                                             

(一)实验内容

1.启动数据库服务软件SQL Server 2000的查询分析器,用INSERT语句对表进行插入操作。

/*将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中*/

INSERT

    INTO  Student (Sno,Sname,Ssex,Sdept,Sage)

    VALUES ('200215128','陈冬','男','IS',18)

/*学生张成民的信息插入到Student表中*/

INSERT

            INTO  Student

            VALUES ('200215126','张成民',18,'CS','男')

/*对表Student中每一个系,求学生的平均年龄,并把结果存入表Dept_age表中。*/

第一步:CREATE  TABLE  Dept_age

          (Sdept  CHAR(15),             /* 系名*/

           Avg_age SMALLINT)    /*学生平均年龄*/

第二步:INSERT

         INTO  Dept_age(Sdept,Avg_age)

              SELECT  Sdept,AVG(Sage)

              FROM  Student

              GROUP BY Sdept

2.用UPDATE语句对表中已有的记录进行修改。

/*将学生200215121的年龄改为22岁*/

UPDATE  Student

         SET Sage=22

         WHERE  Sno='200215121'

/*将所有学生的年龄增加1岁*/

UPDATE Student

         SET Sage= Sage+1

/*将CS系全体学生的成绩置零*/

UPDATE SC

        SET  Grade=0

        WHERE  'CS'=(SELECT Sdept

                        FROM  Student

                        WHERE  Student.Sno = SC.Sno)

3.用DELETE语句对表中已有的记录进行删除。

/*删除学号为200215128的学生记录*/

DELETE

         FROM Student

         WHERE Sno= '200215128 '

/*删除所有的学生选课记录*/

DELETE

        FROM SC

/*删除计算机科学系所有学生的选课记录*/

DELETE

        FROM SC

        WHERE  'CS'=(SELECT Sdept

                            FROM Student

                            WHERE Student.Sno=SC.Sno)

(二)实验方式与分组要求

老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。

实验六  DML的数据查询                                                             

(一)实验内容

1.启动数据库服务软件SQL Server 2000的查询分析器,用SELECT语句对表进行简单查询操作。

/*查询全体学生的学号与姓名。*/

        SELECT Sno,Sname

        FROM Student;

/*查询全体学生的详细记录。*/

SELECT  *

FROM Student;

/*指定DISTINCT关键词,去掉表中重复的行 */

      SELECT DISTINCT Sno

      FROM SC

/*查询考试成绩有不及格的学生的学号*/

SELECT DISTINCT Sno

    FROM  SC

    WHERE Grade<60

/*查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄*/

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage BETWEEN 20 AND 23

/*查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。*/

    SELECT Sname,Ssex

    FROM  Student

    WHERE Sdept IN ('IS','MA','CS' )

/*查询学号为200215121的学生的详细情况。*/

     SELECT *   

     FROM  Student 

     WHERE  Sno LIKE '200215121'

/*查询选修1号课程的学生最高分数。*/

   SELECT MAX(Grade)

   FROM SC

   WHERE Cno=‘1‘

2.用SELECT语句对表进行连接查询操作,连接查询涉及被连接和连接两个表。

等值连接:连接运算符为=

/*查询每个学生及其选修课程的情况*/

SELECT  Student.*,SC.*

FROM     Student,SC

WHERE  Student.Sno = SC.Sno

自然连接:

/*查询每个学生及其选修课程的情况*/

SELECT  Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade

 FROM     Student,SC

 WHERE  Student.Sno = SC.Sno

自身连接:

查询每一门课的间接先修课(即先修课的先修课)

SELECT  FIRST.Cno,SECOND.Cpno

FROM  Course  FIRST,Course  SECOND

WHERE FIRST.Cpno = SECOND.Cno

外连接:

/*查询每个学生及其选修课程的情况(包括Student表中不满足条件的元组)*/

SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade

    FROM  Student  LEFT OUT JOIN SC ON (Student.Sno=SC.Sno);

复合条件连接:WHERE子句中含多个连接条件:

/*查询每个学生的学号、姓名、选修的课程名及成绩*/

  SELECT Student.Sno,Sname,Cname,Grade

   FROM    Student,SC,Course    /*多表连接*/

   WHERE Student.Sno = SC.Sno

                   and SC.Cno = Course.Cno

3.用SELECT语句对表进行嵌套查询操作。

带有IN谓词的子查询:

/*查询与“刘晨”在同一个系学习的学生。此查询要求可以分步来完成*/

SELECT Sno,Sname,Sdept

        FROM Student

   WHERE Sdept  IN

                  (SELECT Sdept

                   FROM Student

                   WHERE Sname='刘晨')

带有比较运算符的子查询

/*假设一个学生只可能在一个系学习,并且必须属于一个系,则在上例中可以用 = 代替IN*/

SELECT Sno,Sname,Sdept

     FROM    Student

     WHERE Sdept =( SELECT Sdept

                    FROM    Student

                    WHERE Sname='刘晨')

带有ANY(SOME)或ALL谓词的子查询

/*查询其他系中比计算机科学某一学生年龄小的学生姓名和年龄*/

    SELECT Sname,Sage

    FROM    Student

    WHERE Sage < ANY (SELECT  Sage

                      FROM    Student

                       WHERE Sdept= 'CS')

          AND Sdept <> 'CS'       /*父查询块中的条件 */

带有EXISTS谓词的子查询

查询没有选修1号课程的学生姓名。

     SELECT Sname

     FROM Student

     WHERE NOT EXISTS

                   (SELECT *

                    FROM SC

                    WHERE Sno = Student.Sno AND Cno ='1');

4.用SELECT语句对表进行组合查询操作。

/*查询计算机科学系的学生及年龄不大于19岁的学生。*/

       SELECT *

        FROM Student

        WHERE Sdept= 'CS'

        UNION   /*UNION:将多个查询结果合并起来时,系统自动去掉重复元组。*/

        SELECT *

        FROM Student

        WHERE Sage<=19;

/*查询计算机科学系的学生与年龄不大于19岁的学生的交集*/

SELECT *

FROM Student

WHERE Sdept='CS'

INTERSECT

SELECT *

FROM Student

WHERE Sage<=19

/*sql server 2000中没有INTERSECT的这样的用法*/

/*查询计算机科学系的学生与年龄不大于19岁的学生的差集。*/

    SELECT *

    FROM Student

    WHERE Sdept='CS'

    EXCEPT

    SELECT  *

    FROM Student

    WHERE Sage <=19

/*sql server 2000中没有EXCEPT的这样的用法*/.

(二)实验方式与分组要求

老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。

实验七  SQL语言的DCL                                                             

(一)实验内容

1.启动数据库服务软件SQL Server 2000的查询分析器,用GRANT语句对数据库存取权限进行授权操作。

/*把查询Student表权限授给用户U1*/

GRANT   SELECT

      ON   Student

      TO   U1

/*把对Student表和Course表的全部权限授予用户U2和U3,但是在sql server 2000中不允许同时对多个表的授权语句*/

      GRANT ALL PRIVILEGES

      ON Student,Course

      TO U2,U3;

/*把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户*/

   GRANT INSERT

    ON TABLE SC

    TO U5

    WITH GRANT OPTION

2.用REVOKE语句将DBA(数据库管理员)、DBO(建库用户)授与其它用户对数据库的操作权收回。

/*把用户U4修改学生学号的权限收回*/

        REVOKE UPDATE(Sno)

        ON Student

        FROM U4;

/*收回所有用户对表SC的查询权限*/

REVOKE SELECT

        ON SC

        FROM PUBLIC;

/*把用户U5对SC表的INSERT权限收回*/

        REVOKE INSERT

        ON TABLE SC

        FROM U5 CASCADE

(二)实验方式与分组要求

老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。

实验八  SQL语言综合练习                                                             

(一)实验内容

1.启动数据库服务软件SQL Server 2000的查询分析器,用Create Table建表;

/*建立“学生”表Student,学号是主码,姓名取值唯一。*/

    CREATE TABLE Student          

          (Sno   CHAR(9) PRIMARY KEY, /* 列级完整性约束条件*/                 

            Sname  CHAR(20) UNIQUE,     /* Sname取唯一值*/

            Ssex    CHAR(2),

            Sage   SMALLINT,

            Sdept  CHAR(20)

           );

2.用Insert Into向表中插入记录;

/*将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中*/

INSERT

    INTO  Student (Sno,Sname,Ssex,Sage,Sdept)

    VALUES ('200215128','陈冬','男',18,'IS')

3.用Create Index在表上建立索引;

/*创建一个Stusname索引,在Student 表中以Sname列升序排列*/

CREATE CLUSTERED INDEX Stusname

           ON  Student(Sname)

/*删除Student表中的Stusname索引*/

4.用Create View建立视图;

/*创建一个IS_Student视图,视图中返回来自于表Student中Sdept=’IS’的所有学生的Sno,Sname,Sage列*/

CREATE VIEW IS_Student     

       AS

           SELECT Sno,Sname,Sage

           FROM  Student

           WHERE Sdept='IS'

5.用SELECT语句进行各种查询操作。

/*查询全体学生的学号与姓名。*/

        SELECT Sno,Sname

        FROM Student;

/*查询全体学生的详细记录。*/

SELECT  *

FROM Student;

/*查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄*/

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage BETWEEN 20 AND 23

/*查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。*/

    SELECT Sname,Ssex

    FROM  Student

    WHERE Sdept IN ('IS','MA','CS' )

*查询学号为200215121的学生的详细情况。*/

     SELECT *   

     FROM  Student 

     WHERE  Sno LIKE '200215121'

(二)实验方式与分组要求

老师先讲解十分钟,学生上机操作数据库SQL Server2000,最后老师检查操作结果。每次86组,每组1人。

 执笔:张平    审核:?

相关推荐