数据库实验指导书( SQL Server 2005)

来源:互联网 发布:appleid被盗 抹掉数据 编辑:程序博客网 时间:2024/05/17 02:27
 

目    录

 

实验一      安装SQL Server 2005. 2

实验二 启动SQL Server2005和建库、表... 3

实验三 SQL Server2005查询分析器... 6

实验四 SQL语言的DDL. 10

实验五 SQL语言的DML初步... 12

实验六 DML的数据查询... 14

实验七 SQL语言综合练习... 18

实验八   数据库设计... 21

实验九  嵌入式SQL的使用... 22

实验目的... 22

实验平台... 22

预备知识... 22

初始化环境:... 24

实验活动... 27

 

 


 


实验一    安装SQL Server 2005

 

一、实验目的

SQL Server 2005是Mircosoft公司推出的关系型网络数据库管理系统,是一个逐步成长起来的大型数据库管理系统。

本次实验了解SQL Server 2005的安装过程,熟悉SQL Server 2005软件环境。学会安装SQL Server 2005的安装。

 

二、实验内容

1.安装Microsoft的数据库服务软件SQL Server 2005:

运行服务器目录SQL2005下的可执行文件autorun.exe,进行SQL Server 2005的安装。

 

三、实验任务

1.在计算机上安装数据库软件SQL Server 2005;

2.熟悉软件的使用



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

一、实验目的

SQL Server 2005的启动和管理工作由服务管理器和企业管理器来实现。

本次实验了解SQL Server 2005的启动,熟悉如何在SQL Server 2005图形环境下建立数据库和表。学会安装SQL Server 2005的启动和建库、表的操作。

二、实验内容

1.启动数据库服务软件SQL Server 2005选择其下的工具SQL Server Management Studio,在其“对象资源管理器”面板中单击展开服务器,右击“数据库”结点,选择“新建数据库”:

2.在“常规”中输入新数据库名Test和日志文件

 

3.在Test数据库上建立表:

输入列名,数据类型,长度等信息,点击 图标,出现选择表名窗口,如图所示:

输入表名,点击确定按钮,将新建的表存盘。

三、实验任务

1.用数据库SQL Server 2005的服务管理器启动数据库服务;

2.用数据库SQL Server 2005的企业管理器建立一个数据文件名为demodata、大小50M,日志文件名为demolog、大小25M的新数据库,该数据库名为Demo。

3.在数据库Demo上,建立如下所示的表customer:

字段名

类型

长度

含义

customid

varchar

17

顾客编号

name

varchar

10

姓名

sex

varchar

2

性别

age

int

4

年龄

xfg

dec

10,2

消费金额

address

varchar

50

地址

memo

varchar

100

备注

 



实验三 SQL Server2005  查询分析器的使用

一、实验目的

SQL Server2005 Management Studio工具中的查询分析器(新建查询)是一种特别用于交互式执行SQL语句和脚本的极好的工具。

本次实验了解SQL Server 2005 Management Studio工具中查询分析器的启动,熟悉如何在SQL Server 2005Management Studio工具中的查询分析器中建表、插入记录、查询记录。学会SQL Server 2005的查询分析器中建表、插入记录、查询记录。

二、实验内容

1.启动数据库服务软件SQL Server 2005的Management Studio工具,选择“新建查询”:

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

在查询分析器的查询窗口中输入SQL语句

提示命令成功完成,或者报告出错信息。

3.查询分析器中向表添加数据:

在查询分析器的查询窗口中输入SQL语句,如图所示。

点击按钮,执行该SQL语句,在查询窗口下部出现一个输出窗口,如图所示。

1.从表中查询数据:

在查询分析器的查询窗口中输入SQL语句,如图所示。

点击 按钮,执行该SQL语句,在查询窗口下部出现一个输出窗口,如图所示。

 

三、实验任务

1.打开数据库SQL Server 2005的查询分析器,用SQL语言建表student,表结构如下图所示:

字段名

类型

长度

含义

id

varchar

17

学生编号

name

varchar

10

姓名

sex

varchar

2

性别

age

integer

 

年龄

score

numeric

6,2

总成绩

 

2.用SQL语言向表student插入如下6条记录:

A0001

赵一

20

580.00

B0002

钱二

19

540.00

C0003

孙三

21

555.50

D0004

李四

22

480.00

E0005

周五

20

495.50

F0006

吴六

19

435.00

 

3.练习查询语句,查找年龄大于等于20岁,成绩低于500分的记录。



实验四 SQL语言的DDL

一、实验目的

SQL(Structured Query Language)语言是关系数据库的标准语言。是一种介于关系代数与关系演算之间的结构化查询语言,其功能并不仅仅是查询,SQL语言是一个通用的、功能极强的关系数据库语言。

从本次实验开始,我们将详细的学习SQL的DDL(数据定义语言)、DML(数据操纵语言)、DCL(数据控制语言)。

本次实验了解DDL语言的CREATE、DROP、ALTER对表、索引、视图的操作,学会SQL Server 2005的查询分析器中用DDL语言进行对表、索引、视图的增加、删除和改动。

二、实验内容

1.  启动数据库服务软件SQL Server 2005的查询分析器,用如下语句对表进行操作,详细的语法格式参看课本相应章节:

Create Table  建表

Drop Table  删除表

Alter Table  更改表

2.用如下语句对视图进行操作,详细的语法格式参看课本相应章节:

Create View  建视图

Drop View    删除视图

3.如下语句对索引进行操作,详细的语法格式参看课本相应章节:

Create Index 建立索引

Drop Index  删除索引

 

 

三、实验任务

1.打开数据库SQL Server 2005的查询分析器,用Create Table建表aa,表结构如下所示:

字段名

类型

长度

含义

Aa1

Varchar

20

字段1

Aa2

Int

 

字段2

Aa3

Dec

10,2

字段3

2.用Create Table建表bb,表结构如下所示:

字段名

类型

长度

含义

Bb1

Varchar

30

字段1

Bb2

Int

 

字段2

Bb3

Dec

6,2

字段3

3.用Drop Table删除表aa。

4.用Alter Table修改表bb,添加一个字段Bb4,类型Varchar,长度20。

5.用Create View对表Bb的Bb1和Bb4建立一个视图Viewbb,字段名为Viewbb1和Viewbb2。

6.Drop View删除视图Viewbb。

7.用Create Index对表Bb的Bb3字段建立一个升序索引,索引名Indexbb。

8.用Drop Index删除索引Indexbb。

9.将以上的SQL语言存盘,以备老师检查。



实验五 SQL语言的DML初步

一、实验目的

SQL的数据操纵功能通过DML(数据库操作语言)实现。DML包括数据查询和数据更新两种数据操作语句。其中,数据查询指对数据库中的数据查询、统计、分组、排序等操作;数据更新指数据的插入、删除和修改等数据维护操作。

本次实验了解DML语言的INSERT、UPDATE、DELETE对数据的操作,学会SQL Server 2005的查询分析器中用DML语言对表中的数据进行插入、删除和修改。

 

二、实验内容

1.启动数据库服务软件SQL Server 2005的查询分析器,用INSERT语句对表进行插入操作,语法格式如下:

Insert Into <表名> [(<属性列1>[,<属性列2>]…)]

Values (<常量1>[,<常量2>]…);

2.用UPDATE语句对表中已有的记录进行修改,语法格式如下:

Update <表名> Set <列名>=<表达式>[,<列名>=

<表达式>][,…n] [Where <条件>];

3.用DELETE语句对表中已有的记录进行删除,语法格式如下:

Delete From <表名> [Where <条件>];

 

三、实验任务

1.打开数据库SQL Server 2005的查询分析器,用Create Table建表cc,表结构如下所示:

字段名

类型

长度

含义

Cc1

Varchar

20

字段1

Cc2

Int

 

字段2

Cc3

Dec

10,2

字段3

Cc4

Varchar

60

字段4

2.用INSERT语句对表cc插入6条记录

Cc1

Cc2

Cc3

Cc4

赵一

20

580.00

重邮宿舍12-3-5

钱二

19

540.00

南福苑5-2-9

孙三

21

555.50

学生新区21-5-15

李四

22

480.00

重邮宿舍8-2-22

周五

20

495.50

学生新区23-4-8

吴六

19

435.00

南福苑2-5-12

 

3.用UPDATE语句,将表cc中cc2小于等于20的记录,把cc3字段加5。

4.用DELETE语句将表cc中cc2大于等于20和cc3大于等于500的记录删除。

5.将以上的SQL语言存盘,以备老师检查。



实验六 DML的数据查询

一、实验目的

DML的数据查询指对数据库中的数据查询、统计、分组、排序等操作。查询语句可以分为简单查询、连接查询、嵌套查询和组合查询。

本次实验了解DML语言的SELECT语句对数据的查询,学会SQL Server 2005的查询分析器中用DML语言对表中的数据进行简单查询、连接查询、嵌套查询和组合查询。

 

二、实验内容

1.启动数据库服务软件SQL Server 2005的查询分析器,用SELECT语句对表进行简单查询操作,整个查询过程只涉及到一个表,是最基本的查询语句。

语法格式如下:

Select <目标列组> From <数据源> [Where <元组选择条件>]

[Group by <分组列> [Having <组选择条件>]]

[Order by <排序列1> <排序要求> [, …n]]

2.用SELECT语句对表进行连接查询操作,连接查询涉及被连接和连接两个表,所以数据源一般为多个表。用来连接两个表的条件称为连接条件,一般格式为:

[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>

其中比较运算符主要有:=、>、<、>=、<=、!=。

3.用SELECT语句对表进行嵌套查询操作,一个Select…From…Where语句称为一个查询块,将一个查询块嵌套在另一个查询块的Where子句或Having短语的条件中的查询,就是嵌套查询。主要有使用In操作符、使用比较运算符的嵌套查询方式。

4.用SELECT语句对表进行组合查询操作,将SELECT语句的查询结果集再进行集合运算就构成了SQL的组合查询。组合查询操作符有Union(并操作)、Intersect(交操作)和Minus(差操作)。

 

三、实验任务

1.打开数据库SQL Server 2005的查询分析器,用Create Table建表Student,表结构如下所示:

字段名

类型

长度

含义

ID

Varchar

20

学号

Name

Varchar

10

姓名

Age

Int

 

年龄

Department

Varchar

30

所在系

 

2.用Create Table建表Course,表结构如下所示:

字段名

类型

长度

含义

CourseID

Varchar

15

课程号

CourseName

Varchar

30

课程名

CourseBefore

Varchar

15

先行课

 

3.用Create Table建表Choose,表结构如下所示:

字段名

类型

长度

含义

ID

Varchar

20

学号

CourseID

Varchar

30

课程号

Score

Dec

5,2

成绩

4.用INSERT语句向表Student中插入3条记录:


ID

Name

Age

Department

00001

张三

20

计算机系

00002

李四

19

计算机系

00003

王五

21

计算机系


 

5.INSERT语句向表Course中插入3条记录:

CourseID

CourseName

CourseBefore

C1

计算机引论

C2

PASCAL语言

C1

C3

数据结构

C2

 

6.用INSERT语句向表Choose中插入7条记录:

ID

CourseID

Score

00001

C1

95

00001

C2

80

00001

C3

84

00002

C1

80

00002

C2

85

00003

C1

78

00003

C3

70

 

7.用SELECT语句求计算机系学生的学号和姓名。

 

8.用SELECT语句求学生的学号、姓名、选的课程名及成绩。

 

9.用SELECT语句求C1课程的成绩低于张三的学生的学号和成绩。

 

10.用SELECT语句求选了C2课程并且也选了C3课程的学生的学号。

11.用select 语句求计算机系年龄在20岁以下的学生的详细信息.

12. 查询所有学生的详细信息,结果按学号降序排列。

13.查询每个系学生的人数。

14.查询每个系学生的平均年龄。

15.查询计算机系学生的最大年龄和最小年龄。

16,查询每个学生的平均分。

17.查询每个学生的选课门数。

18.查询每门课程的选课人数。

19,查询选修课程c1并且成绩在80分以上的学生的学号。

20.查询所有选修了才c2课程的学生的学号。

21.查询所有选了课的学生的学号。

22.查询选修人数大于2的课程号。

23.查询选修人数大于2并且平均成绩大于80分的课程



实验七 SQL语言综合练习

一、实验目的

SQL语言是数据库语言领域中的主流语言,对SQL语言的掌握程度直接关系到数据库学习的好坏。

本次实验通过一个SQL语言的综合练习,对前面的学习的内容进行复习,并加以巩固,希望大家对SQL语言有一个较好的掌握。

 

二、实验内容

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

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

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

4.用Create View建立视图;

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

 

 

 

 

 

三、实验任务

1.打开数据库SQL Server 2005的查询分析器,用Create Table建表Exam,表结构如下图所示:

字段名

类型

长度

含义

Id

varchar

17

学生编号

Name

varchar

10

姓名

Sex

varchar

2

性别

Age

integer

 

年龄

score

numeric

6,2

总成绩

address

varchar

50

地址

Memo

varchar

100

备注

 

 

2.用Insert Into语句向Exam表中添加6条记录,记录内容如下图所示:

A0001

赵一

20

580.00

重邮宿舍12-3-5

学习委员

B0002

钱二

19

540.00

南福苑5-2-9

班长

C0003

孙三

21

555.50

学生新区21-5-15

优秀共青团员

D0004

李四

22

480.00

重邮宿舍8-2-22

暂无相关信息

E0005

周五

20

495.50

学生新区23-4-8

暂无相关信息

F0006

吴六

19

435.00

南福苑2-5-12

暂无相关信息

 

1.对表Exam的Score字段建立一个名为IndexScore的升序索引。

 

4.建立视图ViewExam,字段ViewExam1和ViewExam2分别对应表Exam的Name和Address字段。

 

5.某电信局计费部门涉及如下表

三个表的字段含义如下:

Jm表:

Jmbm

局名编码

Jmhz

局名汉字说明

Jmbz

局名标志

 

Zjm表:

Zjmbm

子局名编码

Zjmhz

子局名汉字说明

Jmbm

局名编码

Zjmbz

子局名标志

 

 

Dhshow表:(其它字段与本次测验无关,未给出相关含义)

Dhh

电话号码

Sl1

长话费

Sl3

市话费

Sl39

地区编码

Sl40

子局名编码

 

表间关联:Jm表中的jmbm和zjm表中的jmbm是相等的;

Zjm表中的zjmbm和dhshow表中的sl40是相等的。

表说明:dhshow表中的sl1和sl3字段的计费单位是币人民分。

请插入适当数据,然后完成下列查询

6.用SELECT语句,求某一地区长话消费平均是多少分人民币。

 

7.用SELECT语句,求某一地区市话消费总额大于10元人民币并且长话消费不为零的电话号码。

8.用SELECT语句,查询每一电话局各包含哪些子局?

9.用SELECT语句,查询每一子局的长话费总额?

10.      用SELECT语句,查询每一电话局的长话费总额?


实验八   数据库设计

一、学时

4学时

二、实验类型

综合、设计

三、实验目的

学习使用数据库设计工具进行数据库的设计,并熟悉数据库的设计的基本方法和步骤,搞清数据库设计各阶段的任务

四、实验准备

1.熟悉数据库设计工具的设计环境;

2.复习SQL语言命令;

3.复习E-R图的绘制; 

4.复习数据库设计的方法、步骤

六、实验方法及步骤

1.            对一小型数据库应用系统进行需求分析;

2.            绘制E-R图;

3.            将E-R模型向数据模型转换;

4.            创建数据库,定义基本表

七、实验内容

系统数据库的设计;

 


实验九  嵌入式SQL的使用
实验目的

1.       熟悉嵌入式SQL编程

2.       巩固SQL的知识


实验平台

1.       OS:

WindowsXP

2.       DBMS:

SQLServer2005

3.       Compiler:

Visual C++ 6.0


预备知识

1)嵌入式SQL编程:

嵌入式SQL由SQL语句和C/C++代码组成。其中SQL语句由预处理器翻译成C或C++的源代码。对预处理后的源代码进行编译、连接生成可执行程序后方可运行。

l         SQL预处理器

SQLServer的预处理程序是nsqlprep.exe。其常用的语法格式如下:

nsqlprep 程序文档名

n         nsqlprep详细的语法格式以及参数意义,请看联机帮助。

 

经查阅联机帮助,nsqlprep的语法格式如下:

nsqlprep program_file_name [/SQLACCESS | /NOSQLACCESS]

[/FLAGGER {ENTRY | NONE}] [/DB [server_name.]database_name

/PASS {login[.password] | $INTEGRATED}] [/BIND file_name]

[/MSG file_name] [/NOLOGO] [/PLAN name] [/NOLINES]

[/user_defined_option]

 

n         要求程序文档名的后缀为.sqc,可以省略。

n         预编译后得到的文档,与程序文档同名,后缀为.c;放在与程序文档名同一个路径下

nsqlprep.exe在SQLServer的安装目录的 MSSQL\Binn下。

在本机中SQLServer的安装目录是C:\Program Files\Microsoft SQL Server, nsqlprep.exe在C:\Program Files\Microsoft SQL Server\MSSQL\Binn。

l         连接方式

经预处理后的c文件就可以用c的编译器进行编译连接了。

使用Visual C++ 6.0进行编译连接,连接方式是动态连接,用到动态链接库SQLakw32.dll,sqlaiw32.dll;此两文件已经随同binn.rar的其他内容,被拷贝到C:\Program Files\Microsoft SQL Server\MSSQL\Binn下;但仍然需要把该路径加到系统的路径变量中,以使得程序运行时能找到这两个文件。

方法1:把该两文件拷贝到操作系统目录下的子目录system32中

方法2:把C:\Program Files\Microsoft SQL Server\MSSQL\Binn加到系统环境变量path中。“我的电脑”->“属性”->“高级”->“环境变量”->“path,编辑”,如下图所示:

在变量值中加入该路径值;注意,路径间用分号”;”分开。

2)通过ODBC访问数据库:

配置ODBC,为SQL Server添加数据源。如下图所示:

 


初始化环境:

1.  SQL Server2005为其嵌入式SQL提供了一些特殊的接口;默认的安装方式(典型安装)并没有安装这些接口;因此,需要把devtools.rar解压到SQLServer的系统目录下(注意,不是安装目录);本机是把操作系统安装在C盘,则SQLServer的系统目录则是C:\Program Files\Microsoft SQL Server。

2.  初始化SQL Server的预编译环境。

n         初始化Visual C++ 6.0 编译器环境,运行文件:\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT

这个过程要在DOS下运行才有效,即找vcvars32.bat的路径,在DOS下运行。

具体步骤如下:

 

n         初始化SQLServer的预编译环境,运行文件:\devtools\samples\esqlc\setenv.bat。

运行方式与vcvars32.bat相同,结果如下:

3.  初始化Visual C++ 6.0环境。

n         Tools->options->directories->Include

Files: C:\Program Files\Microsoft SQL Server\devtools\include

n         Tools->options->directories->Lib

Files:C:\Program Files\Microsoft SQL Server\devtools\x86lib

注意:这些路径需要设为第一项。如下图所示:

n         Project->Settings->Link->Object/Library Modules,添加库文件:

SQLakw32.lib,Caw32.lib

注意,两个文件之间用空格分开。


实验活动

1.         阅读和分析程序esql.sqc,解释程序的主要内容和主要数据结构。

              数据结构:

              主要为在数据库中存储的表,及针对表进行的查找。

 

2.         对程序esql.sqc作适当的修改,使之可以在本地系统上可以运行。进行预处理、编译、连接(lib连接),查看运行结果。

1)修改:

只需要对连接的服务器及数据库进行修改即可:

EXEC SQL CONNECT TO SKY.pubs USER abc.abc;

2)进行预处理:

将esql.sqc文件放在C:\Program Files\Microsoft SQL Server\MSSQL\Binn目录下,运行cmd,进入C:\Program Files\Microsoft SQL Server\MSSQL\Binn目录,用nsqlprep esql.sqc的方式运行该文件,可以在C:\Program Files\Microsoft SQL Server\MSSQL\Binn中找到预编译后生成的.c文件。

 

编写程序,使用嵌入式SQL实现如下的功能:

1.  编写程序,创建下列关系表,并插入数据。

create table provider (

SNO char(5)   primary key,

SNAME char(10)  not null,

STATUS int,

CITY  char(10)

);

 

insert into provider values('S1','精益','20','天津');

insert into provider values('S2','胜锡','10','北京');

insert into provider values('S3','东方红','30','天津');

insert into provider values('S4','丰泰盛','20','天津');

insert into provider values('S5','为民','30','上海');

insert into provider values('S6','通天','25',null)

说明:以上两个步骤在两种方法中都是在同一个程序中实现,关键部分用黄色标出,exp为在企业管理器中新建的数据库。

 

源程序如下:

 

A)用嵌入式SQL实现:

#include <stdio.h>

#include <stdlib.h>

EXEC SQL INCLUDE sqlca;

 

int main()

{

    EXEC SQL BEGIN DECLARE SECTION;

       

        //主变量

        char sno[5];

        char sname[10];

        int status;

        char city[10];

        short cityInd;//指示变量

 

    EXEC SQL END DECLARE SECTION;

 

    printf("This is my Embedded SQL for C application\n");

       

    EXEC SQL CONNECT TO SKY.exp  USER sa.sa;//连接到数据库

 

    if (SQLCODE == 0)

    {

        printf("Connection to SQL Server established\n");

    }

    else

    {

        // 连接DBMS错误

        printf("ERROR: Connection to SQL Server failed\n");

        return (1);

    }

 

    //下面为程序的主体部分 

EXEC SQL create table provider (

    sno     char(5)     primary key,

    sname   char(10)    not null,

    status int,

    city    char(10)

    );

 

    EXEC SQL insert into provider values('S1','精益','20','天津');

    EXEC SQL insert into provider values('S2','胜锡','10','北京');

    EXEC SQL insert into provider values('S3','东方红','30','天津');

    EXEC SQL insert into provider values('S4','丰泰盛','20','天津');

    EXEC SQL insert into provider values('S5','为民','30','上海');

    EXEC SQL insert into provider values('S6','通天','25',null);

 

    EXEC SQL WHENEVER SQLERROR GOTO error;//错误处理

    EXEC SQL WHENEVER NOT FOUND GOTO done;

 

    EXEC SQL DECLARE providerCursor CURSOR FOR

    SELECT sname, city

    FROM    provider;

 

    EXEC SQL OPEN providerCursor ;

 

    for ( ; ; ) {

        /* Fetch next row of the result table */

        EXEC SQL FETCH providerCursor INTO :sname,:city:cityInd;

        /* display data */

        printf ("Sname:%s  ",sname);

        if ( cityInd< 0)//通过设置指示变量,并判断指示变量的值<0来确认和输出null值

            printf ("City:NULL\n");

        else

            printf ("City:%s\n",city);

    }

   

error:

    printf ("SQL error %d\n",sqlca->sqlcode);//若照书上写sqlca.sqlcode编译报语法错

done:

    /* Close the cursor before completing*/

    EXEC SQL WHENEVER SQLERROR continue;

    EXEC SQL CLOSE providerCursor;

    EXEC SQL COMMIT WORK RELEASE;

 

    //断开连接

    EXEC SQL DISCONNECT ALL;

   

    return 0;  

}

1. 

原创粉丝点击