10.1 实验一 SQL Server数据库基本操作
一.实验目的
本实验主要了解Microsoft SQL Server 2000中各组件的主要功能和基本使用方法;了解SQL Server数据库的逻辑结构和物理结构;了解数据表的结构特点以及索引的基本概念。通过本实验,读者将学会在“企业管理器”中创建和修改数据库和数据表结构、对数据表进行数据的添加、删除和更新操作以及在数据表上创建字段索引的操作。
二.实验环境
? Microsoft SQL Server 2000 企业管理器
三.实验内容
1.创建一个名称为Book的数据库,支持教材订购信息管理,要求:
(1)将主数据库文件Book_Data.MDF放置在的D:\\DBF文件夹中,文件大小为5MB,最大值为50MB,文件增量为2MB。
(2)将事务日志文件Book_Log.LDF放置在的D:\\DBF文件夹中,文件大小为5MB,最大值为100MB,文件增量为1MB。
实验参考步骤:
1)在D:\\下创建DBF文件夹。
2)在企业管理器窗口右单击“数据库”或任一数据库名,从快捷菜单中选择“新建数据库”命令,出现“数据库属性”对话框。
3) 在“数据库属性”对话框中选择“常规”选项卡,在名称文本框中输入:Book;
4) 在“数据库属性”对话框中选择“数据文件”选项卡,设置数据文件的位置、大小、最大值和文件增量等属性;
5) 在“数据库属性”对话框中选择“事务日志”选项卡,设置事务日志文件的位置、大小、最大值和文件增量等属性。
2.在上题所建数据库Book中建立5张数据表结构并分别向数据表插入记录。
实验参考步骤:
在企业管理器中展开Book数据库。右击数据库文件夹下的“表”项,从弹出的快捷菜单中选择“新建表”命令,弹出“表设计”界面,分别建立5张表的结构,并且为各个表建立主关键字。
3.创建T_Teacher、T_Academy、T_BookInfo、T_Publisher和T_BookOrder5个表之间的关系。
实验参考步骤::
1) 在企业管理器中展开Book数据库。右击数据库文件夹下的“关系图”项,从弹出的快捷菜单中选择“新建数据库关系图”命令。
2) 通过“创建数据库关系图向导”新建关系图。
4.任选两个数据表插入3-5条记录(例如T_BookInfo、T_BookOrder、T_Teacher),各数据表记录如表9-xb)所示。
实验参考步骤:
在企业管理器中展开Book数据库中的表文件夹,右单击需插入记录的数据表,从弹出的快捷菜单中选择“打开表/返回所有行”命令。在数据表显示界面中依次输入记录。
5.将T-teacher表“TeacherName”字段的类型改为Varchar(16)。为T_BookOrder表添加约
束条件,使得“StuBookNum”和“TeaBookNum”的取值都大于0;“OrderTime”大于2007年。
实验参考步骤:
1) 在企业管理器中展开Book数据库中的表文件夹,右击T-teacher表,选择“表设计”,进入T-teacher表结构设计界面,修改“TeacherName”字段的类型。
2) 在企业管理器中展开Book数据库表文件夹,右击T_BookOrder表,选择“表设计”,进入T_BookOrder表结构设计界面,右单击T_BookOrder表结构设计界面,从弹出的快捷菜单中选择“CHECK约束”命令,在“属性”对话框的“CHECK约束”选项卡中点击“新建”按钮分别设置约束条件。
6.练习记录数据的添加、删除和更新操作。在T_Teacher表中添加记录“01010117、黄蓉、13、女、1977-9-21、副教授、63478445”。将T_Teacher表中TeacherCode为“01010113”的记录删除;将TeacherCode为“01010116”记录的title字段内容更新为“教授”。
实验参考步骤:
在企业管理器中展开Book数据库表文件夹,右击T-teacher表,选择“打开表/返回所有行”,进入T-teacher表数据行显示界面,进行数据的添加、删除和更新操作。
7.在企业管理器中练习索引的创建和删除。在“TeacherName”(降序)和“AcadCode”(升序)上建立一个名称为“Name_Code”的普通索引。删除“Name_Code”索引。
实验参考步骤: 方法1:
在企业管理器中展开Book数据库表文件夹,右击T_Teacher表,选择“表设计”,进入T_Teacher表结构设计界面,右单击T_Teacher表结构设计界面,从弹出的快捷菜单中选择“索引/键”命令,在“属性”对话框的“索引/键”选项卡中点击“新建”按钮进行“Name_Code”索引的建立。 方法2:
在企业管理器中展开Book数据库表文件夹,右击T-teacher表,选择“所有任务/管理索引”,打开“管理索引”窗口,进行索引的建立和编辑。
10.2 实验二 T-SQL语言基本操作
一.实验目的
本实验主要了解T-SQL语句以及在查询分析器中执行T-SQL语句的方法。通过本实验,读者将了解使用T-SQL语句创建数据库和数据表;掌握数据库查询语句Select语句的基本语法及使用方法;掌握对数据表进行数据插入、修改和删除的T-SQL语句;了解T-SQL语言的各种运算符、控制语句的功能并学会简单的程序编写。
二.实验环境
? Microsoft SQL Server 2000查询分析器和Microsoft SQL Server 2000企业管理器 ? Book数据库
三.实验内容
1.利用企业管理器中提供的“生成SQL脚本”命令编写Book数据库中数据表对象“T_Teacher”、“T_BookOrder”、“T_BookInfo”、“T_Publisher”、“T_Academy”创建的脚本文件D:\\Table.sql。
实验参考步骤:
1) 在企业管理器右单击Book数据库,选择“所有任务/生成SQL脚本”菜单,打开“生成SQL脚本”窗口,点击“全部显示”按钮。
2) 按要求添加写入脚本的对象,点击“确定”按钮,打开“另存为”对话框,设置脚本文件名称。
2.在查询分析器中使用T-SQL语句完成实验一中的第1题。
CREATE DATABASE Book ON
(NAME=Book_Data,
FILENAME='D:\\DBF\\BOOK_Data.MDF', SIZE=5MB, MAXSIZE=50MB, FILEGROWTH=2MB) LOG ON
(NAME=Book_log,
FILENAME='D:\\DBF\\Book_Log.LDF', SIZE=5MB, MAXSIZE=100MB, FILEGROWTH=1MB)
3.编写SELECT语句,建立以下查询 1)显示T_BookInfo表中所有字段的值。
SELECT * FROM T_BookInfo
2)查询T_Teacher表中所有记录的TeacherCode、TeacherName、EnterDate和Title字段信息。
USE Book
SELECT TeacherCode,TeacherName,EnterDate,Title FROM T_Teacher
3)查询男教师的姓名(TeacherName),显示时将字段名TeacherName改为“姓名”。
SELECT TeacherName AS 姓名 FROM T_Teacher WHERE Sex='男'
4)查询2007年以后出版的教材名称(BookName)、出版日期(PublishDate)和库存量(StockNum),显示时字段标题分别为:教材名称、出版日期和库存量。
SELECT BookName AS 教材名称,
PublishDate AS 出版日期,StockNum AS 库存量 FROM T_BookInfo
WHERE year(PublishDate)>='2007' 或
SELECT BookName AS 教材名称,
PublishDate AS 出版日期,StockNum AS 库存量 FROM T_BookInfo
WHERE PublishDate>='2007-01-01'
5)查询所有教材的出版社代码(PublisherCode),将重复的记录去掉。
SELECT DISTINCT PublisherCode FROM T_BookInfo
6)查询学生订书量(StuBookNum)最大的3个记录,显示教材代号(BookCode)和学生订书量(StuBookNum)。
SELECT top 3 BookCode,StuBookNum FROM T_BookOrder
ORDER BY StuBookNum DESC
图7
7)查询学生订书量(StuBookNum)在150到250之间的教材信息。
SELECT BookCode,TeacherCode,StuBookNum,OrderTime FROM T_BookOrder
WHERE ( StuBookNum BETWEEN 150 AND 250)
8)查询每一种教材的学生订书总量。
SELECT BookCode AS 教材代号 ,SUM(StuBookNum) AS 学生订书数量 FROM T_BookOrder GROUP BY BookCode
9)查询书名为“VB程序设计”的教材的学生总订量(StuBookNum)和教师总订量(TeaBookNum)和总订量。
SELECT SUM(StuBookNum) AS 学生总订量,SUM(TeaBookNum) AS 教师总订量, (SUM(StuBookNum)+SUM(TeaBookNum)) AS 总订量 FROM T_BookInfo ,T_BookOrder
WHERE T_BookInfo.BookCode=T_BookOrder.BookCode AND BookName='VB程序设计' 或
SELECT SUM(StuBookNum) AS 学生总订量,SUM(TeaBookNum) AS 教师总订量, (SUM(StuBookNum)+SUM(TeaBookNum)) AS 总订量 FROM T_BookInfo INNER JOIN T_BookOrder ON T_BookInfo.BookCode=T_BookOrder.BookCode WHERE BookName='VB程序设计'
10)显示教材的最高价、最低价、平均价、最高价与最低价之间的差值。
SELECT str(Max(Price),5,2) AS 最高价,str(Min(Price),5,2)AS 最低价, str(AVG(Price),5,2) AS 平均价, str((Max(Price)-Min(Price)),5,2) AS 差值 FROM T_BookInfo
11)查询出版社代号(PublisherCode)为10、02、31的出版社所出版的教材信息。要求显示教材名称(BookName)、作者(Author)、价格(Price)、库存(StockNum)和出版社名称(Publisher)。
SELECT T_BookInfo.BookName,T_BookInfo.Author,T_BookInfo.Price, T_BookInfo.StockNum,T_Publisher.PublisherCode,T_Publisher.Publisher FROM T_Publisher,T_BookInfo
WHERE T_Publisher.PublisherCode=T_BookInfo.PublisherCode AND T_Publisher.PublisherCode IN ('10','02','31') 或:
SELECT T_BookInfo.BookName,T_BookInfo.Author,T_BookInfo.Price,
T_BookInfo.StockNum,T_Publisher.PublisherCode,T_Publisher.Publisher FROM T_Publisher INNER JOIN T_BookInfo
ON T_Publisher.PublisherCode=T_BookInfo.PublisherCode WHERE T_Publisher.PublisherCode IN ('10','02','31')
12)查询没有领书的教师信息。要求显示TeacherCode(教师工号)、TeacherName(姓名)、AcadName(学院名称)和Telephone(电话号码),并按学院名称降序排列。
SELECT T_Teacher.TeacherCode,TeacherName,AcadName,Telephone FROM T_BookOrder ,T_Teacher ,T_Academy
WHERE T_Teacher.TeacherCode= T_BookOrder.TeacherCode AND T_Teacher.AcadCode= T_Academy.AcadCode AND TakeAway=0 ORDER BY AcadName DESC 或:
SELECT T_Teacher.TeacherCode,TeacherName,AcadName,Telephone FROM T_Academy INNER JOIN
(T_Teacher INNER JOIN T_BookOrder
ON T_Teacher.TeacherCode=T_BookOrder.TeacherCode) ON T_Academy.AcadCode=T_Teacher.AcadCode WHERE TakeAway=0 ORDER BY AcadName DESC
13)查询人文学院教师所订教材的信息。要求显示教材代码(BookCode)、数量(StuBookNum+TeaBookNum)和订教材日期(OrderTime)。
SELECT BookCode,StuBookNum+TeaBookNum AS 数量,OrderTime FROM T_BookOrder
WHERE TeacherCode IN (SELECT TeacherCode FROM T_Teacher
WHERE AcadCode=(SELECT AcadCode FROM T_Academy
WHERE AcadName='人文学院')) 或:
SELECT BookCode,StuBookNum+TeaBookNum AS 数量,OrderTime FROM T_BookOrder WHERE TeacherCode IN (SELECT TeacherCode
FROM T_Teacher INNER JOIN T_Academy ON T_Teacher.AcadCode=T_Academy.AcadCode WHERE AcadName='人文学院')
14)查询姓名字符数大于等于4个字符的作者情况,要求显示作者姓名(Author)、教材名称(BookName)。
SELECT Author,BookName From T_BookInfo WHERE LEN(Author)>=4