目录

  • 第1单元    数据库系统导论
    • ● 任务1.1  数据库基本概念
    • ● 任务1.2  设计E—R 图
    • ● 任务1.3   将E-R图转换成关系模型
    • ● 任务1.4   练习与作业
    • ● 教与学参考资源
  • 第2单元   认识SQL SERVER数据库
    • ● 任务2.1 数据库应用场景
    • ● 任务2.3  SQL  Server 数据库安装
    • ● 任务2.4 SQL Server 的管理
    • ● 任务2.5  使用SSMS连接数据库
    • ● 教与学参考资源
  • 第3单元  创建和管理数据库
    • ● 任务3.1 创建数据库
    • ● 任务3.1(2)  命令创建数据库
    • ● 任务3.2 管理数据库
    • ● 任务3.2(2) 查看、收缩数据库
    • ● 教与学参考资源
  • 第4单元 创建和管理数据库表
    • ● 任务4.1 SQL Server常用数据类型
    • ● 任务4.2  创建数据表
    • ● 任务4.3  命令创建表
    • ● 任务4.4 实施完整性约束
    • ● 教与学参考资源
  • 第 5 单元   查询数据表
    • ● 任务5.1 单表数据查询
    • ● 任务5.2 多表数据查询
    • ● 任务5.3 嵌套查询
    • ● 任务5.4 合并查询结果
    • ● 教与学参考资源
  • 第6单元  管理表中数据
    • ● 任务6.1   添加数据
    • ● 任务6.2  修改数据
    • ● 任务6.3  删除数据
    • ● 习题与训练
    • ● 教与学参考资源
  • 第7单元  使用索引和视图
    • ● 任务7.1  使用索引
    • ● 使用T-SQL创建索引
    • ● 任务7.2  使用视图
    • ● 使用T-SQL语句创建视图
    • ● 教与学参考资源
  • 第8单元 Transact-SQL语言编程
    • ● 任务8.1   声明和使用变量
    • ● 任务8.2   流控语句
    • ● 任务8.3   常用系统函数
    • ● 任务8.4   创建自定义函数
    • ● 教与学参考资源
  • 第9单元  事务和锁
    • ● 任务   9.1     事务
    • ● 事务的基本操作
    • ● 任务9.2    锁
    • ● 死锁及避免方法(例)
    • ● 教与学参考资源
  • 第10单元  创建和管理存储过程
    • ● 任务10.1 存储过程及优点
    • ● 任务10.2 创建和执行存储过程
    • ● 任务10.3   存储过程参数和返回值
    • ● 任务10.4 修改、删除、 重新编译存储过程
    • ● 教与学参考资源
  • 第11单元 创建和管理触发器
    • ● 任务1 触发器的作用和分类
    • ● 任务2 触 发器的创建与执行
    • ● 任务3 创建级联触发器
    • ● 任务4 修改、删除触发器
  • 第12单元 创建和使用游标
    • ● 任务1  游标的作用及使用步骤
    • ● 任务2  创建基本游标
    • ● 任务3  使用变量保存游标数据
    • ● 任务4  使用循环环提取游标数据
  • 第13单元 SQL Server用户管理
    • ● 任务1数据库安全管理概述
    • ● 任务2SQL Server 安全机制
    • ● 任务3 账号、角色及权限管理
    • ● 任务4数据库完整性管理
    • ● 任务5 数据库的备份与还原
    • ● 任务6   数据的导入与导出
  • 第14单元  综合应用案例
    • ● 概述
    • ● 需求分析
    • ● 概述设计-逻辑设计- 物理设计
    • ● 编写数据库设计说明书
  • 学生做项目成果展示
    • ● 项目一  设计《我班同学数据库》
    • ● 项目二  设计《(Teaching)教学数据库》
    • ● 项目三  数据库应用系统设计开发项目
    • ● 项目四 《华夏-宿舍管理系统》设计开发
    • ● 项目五   综合实训大作业
    • ● 综合实训团队项目大作业
    • ● 学生完成项目摘录展示
  • 总复习与综合训练
    • ● 总复习
    • ● 综合训练一
    • ● 综合训练二
    • ● 综合训练三
    • ● 综合训练四
    • ● 综合训练五
    • ● 简答综合训练
  • 在线专题测验
    • ● 自检自测一
    • ● 自检自测二
  • 拓展   数据库管理工具平台  Navicat
    • ● 关于Navica
    • ● Navicat 的系统需求
    • ● Navicat 的用户界面
    • ● Navicat 创建数据库对象
    • ● 在Navicat创建的SQL 程序脚本
    • ● 在Navicat创建的SQL  server 脚本(2)
    • ● 综合实训(1)
    • ● 综合实训(2)
  • 技术拓展   (MYSQL)数据库技术与应用
    • ● MYSQL技术
  • 教与学图片剪影
    • ● 教学团队
    • ● 学生学习实训
    • ● 活动与交流
项目一  设计《我班同学数据库》

团队项目要求:

自由组建3~6人的团队(给团队起个有创意的名称,设计自己团队LOGO,团队成员名单,选择一个项目(可自己命题,经老师同意),团队负责人,任务分工,等),完成一个项目设计与开发。若条件可以,建议采用高级语言或开发工具(如:JAVA等或H5等)完成综合设计开发。

完成时提交:数据库应用系统设计文档,项目团队演示小录像及相关照片、截屏等。


《SQL数据库设计与开发实训》示例:

    设计《我班同学数据库》

 

经初步分析,现有关系数据库如下:

数据库名:我班同学数据库

同学表(学号 char(6),姓名,性别,出生日期,民族,身份证号,宿舍号)

宿舍表(宿舍号 char(6),宿舍电话,可住人数,已住人数)

健康表([健康码] varchar(18) ,[日期] [datetime] ,[体温] float ,[体测地点] varchar(50) ,[备注] ,[报告] )

(项目团队可以考虑增加数据库表及其应用功能)

 

用SQL语言实现下列功能的sql语句代码并上机调试完成实训:

1.创建数据库[我班同学数据库]代码。

参考:

create database [我班同学数据库]

go

use [我班同学数据库]

go

 

2.创建数据表[宿舍表]代码;

   宿舍表(宿舍号char(6),宿舍电话,可住人数,已住人数)

   要求使用:主键(宿舍号)、宿舍电话:以8786开头的8位电话号码

创建数据表[健康表]代码;

健康表([健康码] varchar(18) ,[日期] [datetime] ,[体温] float ,[体测地点] varchar(50) ,[备注,[报告] )     说明:[健康码]可以是学号或身份证号,等。

参考;

create table 宿舍表

([宿舍号] char(6) primary key,

[宿舍电话] char(7) check([宿舍电话] like '633[0-9][0-9][0-9][0-9]') ,

[可住人数]  int ,

[已住人数]  int )

 

create table 健康表

([健康码] varchar(18) ,

[日期] [datetime] ,

[体温] float ,

[体测地点] varchar(50) ,

[备注text ,

[报告] [nvarchar](50) NULL )

 

INSERT INTO [dbo].[健康表]([健康码] ,[日期] ,[体温] ,[体测地点] ,[备注])  VALUES    (190501,GETDATE(),36.7,'广州从化','正常')

 

3.创建数据表[同学表]代码;

   同学表(学号char(6),姓名,性别,出生日期,民族,身份证号,宿舍号)

   要求使用:主键(学号)、外键(宿舍号)、默认(民族)、非空(民族,姓名,年龄)、唯一(身份证号)、检查(性别)

参考:

create table 同学表

(学号 char(6) primary key,

姓名 nchar(4)not null,

性别 nchar(1)check(性别 in ('', '')),

出生日期 datetime,

民族 nchar(8)default '汉族' not null,

身份证号 char(18)unique,

宿舍号 char(6)references 宿舍表(宿舍号)

)

4.将下列宿舍信息添加到宿舍表的代码

       宿舍号         宿舍电话   可住人数,已住人数

        1-101         87861235       6     0

        1-102         87865566       6     0

        2-201         87866688       6     0

 

参考:insert 宿舍表 ([宿舍号],[宿舍电话] ,[可住人数],[已住人数]) values('1-101', '6331157',6,0)

 

        修改 宿舍号为1-101的 宿舍电话:87863366

        删除  宿舍号为1-106的 宿舍信息

   

输入住进1-101宿舍的学生信息信,并同时修改对应宿舍已住人数。

例:INSERT INTO [我班同学数据库].[dbo].[同学表]

           ([学号],[姓名],[性别],[出生日期] ,[民族],[身份证号],[宿舍号])

     VALUES   (190501,'张小明','','2000-02-15','汉族','4401061234555669', '1-101')

update宿舍表  set 已住人数=已住人数+1 where 宿舍号='1-101'

 

按上面要求,输入6个学生的信息,并安排住进适合的房间。

     模拟输入若干健康表的记录,【健康码]可以是学号或身份证号。注意与输入学生的数据信息相对应。

参考:

INSERT INTO [我班同学数据库].[dbo].[同学表]

           ([学号],[姓名],[性别],[出生日期] ,[民族],[身份证号],[宿舍号])

     VALUES

(190503,'张小芳','','1999-03-25','汉族','4401061234566669', '1-102')

update宿舍表  set 已住人数=已住人数+1 where 宿舍号='1-102'

 

INSERT INTO [dbo].[健康表]([健康码] ,[日期] ,[体温] ,[体测地点] ,[备注])  VALUES    (190502,GETDATE(),36.6,'广州从化','正常')

 

5.创建视图[同学表视图]代码;

   同学表视图(学号, 姓名, 性别, 年龄, 民族, 身份证号, 宿舍号, 宿舍电话)

参考:

create view [同学表视图] as

select 学号, 姓名, 性别, YEAR(GETDATE())-YEAR(出生日期) AS 年龄, 民族, 身份证号, 同学表.宿舍号, 宿舍电话

from 同学表,宿舍表

where 同学表.宿舍号=宿舍表.宿舍号

 

6.从同学表视图中查询姓张的男同学的姓名、性别、年龄、宿舍电话。

参考: select 姓名, 性别, 年龄, 宿舍电话,宿舍号

 from同学表视图

 where 姓名 like '张%' and 性别='男'

 

7.从同学表视图中查询女同学的最大年龄、最小年龄、平均年龄。

参考:select 最大年龄 = max(年龄), 最小年龄 = min(年龄), 平均年龄 = avg(年龄)

 from同学表视图  where 性别=''

 

  从健康表中查询各人的最高体温、最低体温、平均体温。

select [健康码] ,最高体温= max(体温),最低体温= min(体温),平均体温= avg(体温)

 from 健康表   GROUP BY [健康码]

 

 

8.创建带参数的存储过程[某宿舍同学]:姓名, 性别,年龄,宿舍电话

  执行此过程,查询'101'宿舍情况

参考:

create procedure [某宿舍同学]

@宿舍号varchar(6)

as

select姓名,性别,年龄,宿舍电话,宿舍号

from同学表视图

where宿舍号= @宿舍号

go

调试参考:execute [某宿舍同学] '1-101'

 

9. 创建[体温触发器] ,要符合要求。规则要求要与实际符合。

参考程序:

  CREATE TRIGGER [dbo].[体温触发器]

ON [dbo].[健康表]

FOR INSERT,UPDATE

AS

BEGIN

DECLARE @体温 float,@日期 datetime

SELECT @日期=日期, @体温=体温 FROM INSERTED

IF  @体温>37.3

PRINT  '华夏小信  警告!体温异常!!'+STR(@体温,6,3)

UPDATE健康表 

SET报告='警告!体温异常!!'   WHERE  体温>37.3 and @日期=日期

END

 

体验触发器

INSERT INTO [dbo].[健康表]([健康码] ,[日期] ,[体温] ,[体测地点] ,[备注])  VALUES    (190502,GETDATE(),37.99,'广州从化','?!')

 

10.  设计一个函数, 根据日期、体温产生转换报告,要符合要求。

参考:

CREATE  FUNCTION  [dbo].[转换报告](@体温 float,@日期 datetime)

RETURNS  CHAR(60)

AS

BEGIN

DECLARE @报告 CHAR(60),@报告日期 CHAR(30)

SET @报告日期=CONVERT(CHAR(20), @日期)

SELECT  @报告= CASE

 WHEN @体温>=39 THEN '体温严重异常!!  '+@报告日期

  WHEN @体温>=37.3 AND @体温<39 THEN '体温异常!  '+@报告日期

  WHEN @体温<37.3  THEN ' 正常 '

  WHEN @体温 IS NULL THEN'没有体测'

 END

RETURN (@报告)

 END

 

调试参考:

DECLARE  @体温  float,@日期 datetime

SET  @体温=37.6

SET @日期=GETDATE()

PRINT dbo.转换报告(@体温,@日期)

 

11.  [dbo].[健康报告视图],要符合要求。

参考:

CREATE  VIEW [dbo].[健康报告视图]

AS

select [健康码] ,最高体温= max(体温),最低体温= min(体温),平均体温= avg(体温), dbo.转换报告(体温,日期)  AS  报告

 from 健康表

 GROUP BY [健康码],dbo.转换报告(体温,日期)

 

12. 创建【输出健康报告表】储存过程,要符合要求。

参考:

CREATE  PROC  输出健康报告表

@JNUM VARCHAR(18)

AS

DECLARE @NUM VARCHAR(18),@NAME VARCHAR(12),@HMAX float,@HMIN  float ,@HAVG float, @报告 VARCHAR(60)

DECLARE Cr1 CURSOR  FOR

SELECT健康码,姓名,最高体温,最低体温,平均体温,报告

FROM [健康报告视图]  K, 同学表 T

WHERE K.健康码=T.学号  AND  K.健康码>=@JNUM

OPEN Cr1

PRINT SPACE(20)+'=============  大学生健康报告 ============='

PRINT '  '

PRINT '健康码   姓名         最高体温     最低体温    平均体温     报告(建议结论)'

PRINT REPLICATE('-',96)

FETCH NEXT FROM Cr1 INTO @NUM,@NAME ,@HMAX,@HMIN ,@HAVG , @报告

WHILE @@FETCH_STATUS=0

BEGIN

         PRINT@NUM+SPACE(3)+CONVERT(CHAR(6),@NAME)+SPACE(3)+STR(@HMAX)+SPACE(3)+STR(@HMIN)+SPACE(3)+STR(@HAVG )+SPACE(8)+ @报告

         PRINT REPLICATE('-',96)

         FETCH NEXT  FROM Cr1 INTO @NUM,@NAME ,@HMAX,@HMIN ,@HAVG , @报告

END

CLOSE Cr1

DEALLOCATE Cr1

 

EXEC  输出健康报告表 00000

 

13.设置一SQL身份验证的用户账户:登录名:U班主任,密码:888666,数据库用户名:U读者,权限:可查询本数据库中所有表、视图、内嵌表值函数的数据,执行所有的存储过程。请写出账户、权限设置的T_SQL脚本。

  参考:

exec sp_addlogin 'U班主任', '888', '我班同学数据库'

exec sp_grantdbaccess 'U班主任', 'U读者'

exec sp_addrolemember 'db_datareader', 'U读者'