文档库 最新最全的文档下载
当前位置:文档库 › 37205-00_SQL Server 2005课后实训参考答案

37205-00_SQL Server 2005课后实训参考答案

课后实训参考答案

单元1(SQL Server概述)

1、使用SQL语句。在Sale数据库中创建名为MyDataType的用户定义数据类型,数据类型为NV ARCHAR,长度为20,该列允许为NULL。

USE Sale

GO

EXEC sp_addtype MyDataType,'NVARCHAR(20)','NULL' GO

单元2(单表数据)

使用查询窗口或sqlcmd实施查询。本实训使用Xk数据库。

--1.查看系部编号为“03”的系部名称。

USE Xk

GO

SELECT DepartName

FROM Department

WHERE DepartNo='03'

GO

--2.查看系部名称中包含有“工程”两个字的系的全名。

USE Xk

GO

SELECT DepartName

FROM Department

WHERE DepartName LIKE'%工程%' GO

--3.显示共有多少个系部。

USE XK

GO

SELECT'系部总数'=COUNT(*)

FROM Department

GO

--4.显示“01”年级共有多少个班级。

USE XK

GO

SELECT'01 级班级数'=COUNT(*)

FROM Class

WHERE ClassNo LIKE'2001%'

GO

SELECT'01 级班级数'=COUNT(*)

FROM Class

WHERE ClassName LIKE'01%'

GO

SELECT'01 级班级数'=COUNT(*)

FROM Student

WHERE ClassNo LIKE'2001%'

GO

--5.查看在“周二晚”上课的课程名称和教师。

USE XK

GO

SELECT'课程名称'=CouName,'任课教师'=Teacher

FROM Course

WHERE SchoolTime='周二晚'

GO

--6.查看姓“张”、“陈”、“黄”同学的基本信息,要求按照姓名降序排序查询结果。

USE XK

GO

SELECT*

FROM Student

WHERE StuName LIKE'张%'OR

StuName LIKE'陈%'OR

StuName LIKE'黄%'

ORDER BY StuName DESC

GO

--方法

USE XK

GO

SELECT*

FROM Student

WHERE StuName like'[张,陈,黄]%' ORDER BY StuName DESC

GO

单元2(多表查询)

--1.按系部统计课程的平均报名人数,要求显示系部名称、平均报名人数。

SELECT'系部名称'=DepartName,'平均报名人数

'=AVG(WillNum)

FROM Course C,Department D

WHERE C.DepartNo=D.DepartNo

GROUP BY DepartName

GO

--如果小数点后只保留位

SELECT'系部名称'=DepartName,'平均报名数

'=CONVERT(DECIMAL(5,2),AVG(WillNum))

FROM Course C,Department D

WHERE C.DepartNo=D.DepartNo

GROUP BY DepartName

GO

--2.统计各个系部的班级数,要求显示系部编号、系部名称和班级数量。

SELECT C.DepartNo,DepartName,COUNT(*)

FROM Class C,Department D

WHERE C.DepartNo=D.DepartNo

GROUP BY C.DepartNo,DepartName

GO

--3.查看“甘蕾”同学选修的课程名、学分、上课时间、志愿号,按志愿号(升序)排序查询结果。

SELECT CouName,Credit,SchoolTime,WillOrder

FROM StuCou SC,Course C,Student S

WHERE SC.CouNo=C.CouNo AND SC.StuNo=S.StuNo AND StuName='甘蕾'

ORDER BY WillOrder

GO

--4.查看“00电子商务”班的选修报名情况。要求显示学号、姓名、课程编号、课程名称、志愿号,并按学号(升序)、志愿号排序(升序)。

SELECT S.StuNo,StuName,C.CouNo,CouName,WillOrder FROM StuCou SC,Course C,Student S,Class CL

WHERE SC.CouNo=C.CouNo AND

SC.StuNo=S.StuNo AND

CL.ClassNo=S.ClassNo AND

ClassName Like'00电子商务'

ORDER BY S.StuNo,WillOrder

GO

--5.按系部统计各系的最少报名人数、最多报名人数、平均报名人数和报名总数,并汇总显示所有系部的报名总数。要求平均报名人数保留两位小数位。

SELECT'系部名称'=DepartName,'最少报名人数

'=MIN(WillNum),'最多报名人数'=MAX(WillNum),'平均报名人数'=CONVERT(DECIMAL(5,2),AVG(WillNum)),'报名总数'=SUM(WillNum)

FROM Course C,Department D

WHERE C.DepartNo=D.DepartNo

GROUP BY DepartName WITH CUBE

GO

单元3(维护数据)

--12.学号为“00000025”的同学第一志愿报名选修“001”课程,请在数据库中进行处理。

INSERT StuCou(StuNo,CouNo,WillOrder,State)

VALUES('00000025','001',1,'报名')

GO

/*课程报名人数增加人*/

UPDATE Course

SET WillNum=WillNum+1

WHERE CouNo='001'

GO

--2.删除学号为“00000025”的学生的选课报名信息。

DELETE StuCou

WHERE StuNo='00000025'

GO

/*课程表'00000025'同学报名的那些课程报名人数都要减少1*/

--方法:

UPDATE Course

SET WillNum=WillNum-1

FROM Course,StuCou

WHERE StuNo='00000025'and

Course.CouNo=StuCou.CouNo

GO

--方法2:(游标)

DECLARE @CouNo char(3)

DECLARE MYCursor cursor

for

SELECT CouNo from StuCou

WHERE StuNo='00000025'

OPEN MYCursor

FETCH NEXT FROM MYCursor INTO @CouNo

WHILE@@FETCH_STATUS=0

BEGIN

UPDATE Course SET WillNum=WillNum-1 WHERE CouNo=@CouNo

FETCH NEXT FROM MYCursor INTO @CouNo

END

CLOSE MYCursor

DEALLOCATE MYCursor

GO

--3.需要将“00多媒体”班级“杜晓静”同学的名字修改为“杜小静”。

UPDATE Student

SET StuName='杜小静'

FROM Student S,Class C

WHERE S.ClassNo=C.ClassNo AND

StuName='杜晓静'AND ClassName='00多媒体' GO

--“00电子商务”班的“林斌”同学申请将已选修的“网络信息检索原理与技术”课程修改为“Linux操作系统”。

UPDATE StuCou

SET CouNo=(SELECT CouNo FROM Course WHERE CouName='Linux操作系统')

FROM StuCou SC,Student S,Course C,Class Cl

WHERE SC.StuNo=S.StuNo AND

SC.CouNo=C.CouNo AND

S.ClassNo=Cl.ClassNo AND

S.StuName='林斌'AND

Cl.ClassName='00电子商务'AND

CouName='网络信息检索原理与技术'

GO

单元4(数据库设计)

某公司计划对产品的销售情况进行计算机管理。产品表具有产品编号、产品名称、单价、库存数量4个属性。客户表包括有客户编号、客户姓名、住址、联系电话4个属性。产品的入库表包括有入库日期、产品编号、产品名称、入库数量、单价属性。销售表包括有销售日期、产品编号、产品名称、客户编号、客户姓名、单价、销售数量。

1.绘出产品销售的E-R图。

2、将产品销售的E-R图转换为关系数据模型。

产品表:

客户表:

入库表:

销售表:

3、将产品销售关系数据模型规范为Ⅲ范式。可参考“创建和管理表”实训题。

4、请分析主键、外键、公共键。

主键:产品表的产品编号,客户表的客户编号。

外键:入库表的产品编号,销售表的产品编号、客户编号。

5、举例说明如何保证产品销售数据的完整性。

表数据完整性:给产品表、客户表创建主键。

列数据的完整性:可以给指定的列创建约束(参见实施数据完整性实训题目)。

参照完整性:给入库表、销售表创建外键。

单元5(创建与管理数据库)Array写出实现如下功能的SQL语句。

1.创建名字为Sale的销售数据库。该数据库有一个名为Sale.mdf 的主数据文件和名字为Sale_log.ldf的事务日志文件。主数据文件容量为4MB,日志文件容量为10MB,数据文件和日志文件的最大容量为20MB,文件增长量为1MB。

CREATE DATABASE Sale

ON

PRIMARY(NAME=Sale,

FILENAME='C:\Sale.mdf',

SIZE=4,

MAXSIZE=10,

FILEGROWTH=1)

LOG ON

(NAME=Sale_log,

FILENAME='D:\Sale_log.ldf',

SIZE=2,

MAXSIZE= 10,

FILEGROWTH=1)/*注意结尾处无逗号*/

GO

2.在Sale数据库下新增名字为UserGroup的文件组。

USE Sale

Go

ALTER DATABASE Sale

ADD FILEGROUP UserGroup

Go

3.以增加次数据文件的方式扩充Sale数据的容量。次数据文件容量为5MB,最大容量为10MB,文件增量为1MB。要求将次数据文件保存在与事务日志文件不同的存储设备上,次数据文件作为UserGroup文件组的成员。

USE MASTER

GO

ALTER DATABASE Sale

ADD FILE

(NAME=Sale2,

FILENAME='C:\Sale2.ndf',

SIZE=5MB,

MAXSIZE=10MB,

FILEGROWTH=1MB)

TO FILEGROUP UserGroup

GO

4.使用存储过程显示Sale数据库的信息。SP_helpdb Sale

GO

单元6(创建与管理数据表)

1.实训项目都是围绕Sale数据库展开,进销存系统通常包括客户资料、产品信息、进货记录、销售记录等。所以针对Sale数据库,设计表了表1-4,数据请见表5-8,并将在后续章节逐步完善。使用Transcact-SQL语句,在Sale数据库下创建客户表、产品表、入库表和销售表并输入数据。请将脚本保存为.sql文件。

表1 Customer(客户表)结构

表2 Product(产品表)结构

表3 ProIn(入库表)结构

表4 ProOut(销售表)结构

表5 Customer(客户表)数据

表6 Product(产品表)数据

表7 ProIn(入库表)数据

表8 ProOut(销售表)数据

相关文档
相关文档 最新文档