数据库实验指导书( SQL Server 2005)
目 录 实验 一 安装SQL Server 2005. 2 实验 二 启动SQL Server2005和建库、表... 3 实验 三 SQL Server2005查询分析器... 6 实验 四 SQL语言的DDL. 10 实验 五 SQL语言的DML初步... 12 实验 六 DML的数据查询... 14 实验 七 SQL语言综合练习... 18 实验 八
目 录
实验一 安装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 [([,]…)]
Values ([,]…);
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 [, …n]]
2.用SELECT语句对表进行连接查询操作,连接查询涉及被连接和连接两个表,所以数据源一般为多个表。用来连接两个表的条件称为连接条件,一般格式为:
[.] [.]
其中比较运算符主要有:=、>、=、
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
#include
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
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.