目录

  • 第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技术
  • 教与学图片剪影
    • ● 教学团队
    • ● 学生学习实训
    • ● 活动与交流
总复习

SQL SERVER 数据库技术》课程 复习

 (知识点、技能要求)

 

1.数据处理是对各种数据进行采集、存储、检索、加工、变换和传输的一系列活动的总和。

2.数据管理是指对数据进行分类、组织、编码、存储、检索和维护,它是数据处理的中心问题。

 

3.数据库是按照一定关系组织起来的有联系的数据集合。用数据库管理数据与用文件系统管理数据相比,减少了数据冗余度。

4.运用数据库技术对数据进行管理是当今的主流技术,其核心是建立、管理和使用数据库。

问题:数据库有什么用? 谈谈学习数据库的意义。

 答:运用数据库技术对数据进行管理是当今的主流技术,其核心是建立、管理和使用数据库。

数据库的应用领域非常广泛,不管是家庭、公司或大型企业,还是政府部门,都需要使用数据库来存储数据信息。传统数据库中的很大一部分用于商务领域,如证券行业、银行、销售部门、医院、公司或企业单位,以及国家政府部门、国防军工领域、科技发展领域等。

例:网站的后台管理需要用到数据库,MIS需要用到数据库。

随着信息时代的发展,数据库也相应产生了一些新的应用领域。主要表现在下面6个 方面。

1)多媒体数据库

这类数据库主要存储与多媒体相关的数据,如声音、图像和视频等数据。多媒体数据最大的特点是数据连续,而且数据量比较大,存储需要的空间较大。
(2)移动数据库
该类数据库是在移动计算机系统上发展起来的,如笔记本电脑、掌上计算机等。该数据库最大的特点是通过无线数字通信网络传输的。移动数据库可以随时随地地获取和访问数据,为一些商务应用和一些紧急情况带来了很大的便利。
(3)空间数据库
这类数据库目前发展比较迅速。它主要包括地理信息数据库(又称为地理信息系统,即GIS)和计算机辅助设计(CAD)数据库。其中地理信息数据库一般存储与地图相关的信息数据;计算机辅助设计数据库一般存储设计信息的空间数据库,如机械、集成电路以及电子设备设计图等。
(4)信息检索系统
信息检索就是根据用户输入的信息,从数据库中查找相关的文档或信息,并把查找的信息反馈给用户。信息检索领域和数据库是同步发展的,它是一种典型的联机文档管理系统或者联机图书目录。
(5)分布式信息检索
这类数据库是随着Internet的发展而产生的数据库。它一般用于因特网及远距离计算机网络系统中。特别是随着电子商务的发展,这类数据库发展更加迅猛。许多网络用户(如个人、公司或企业等)在自己的计算机中存储信息,同时希望通过
网络使用发送电子邮件、文件传输、远程登录方式和别人共享这些信息。分布式信息检索满足了这一要求。
(6)专家决策系统
专家决策系统也是数据库应用的一部分。由于越来越多的数据可以联机获取,特别是企业通过这些数据可以对企业的发展作出更好的决策,以使企业更好地运行。由于人工智能的发展,使得专家决策系统的应用更加广泛。


5.数据库系统一般由数据库、数据库管理系统(及其开发工具)、数据库应用系统、数据库管理员和用户构成。

 

练习题:DBS(数据库系统)、DBMS(数据库管理系统)、DB(数据库)三者的关系是(    )。

A、 DBMS包括DBS和DB

B、DBS包括DBMS和DB

C、DB包括DBS和DBMS 

D、三者的包含关系在不同的场合下会发生改变

判断题:

(1)每个信息可以用多种数据形式来表示。  (YES!)

(2)数据库管理系统是数据库系统的重要组成部分。(YES!)

 

6.数据库系统的用户分为数据库管理员、程序设计人员以及终端用户 3 类。数据库管理员(DataBase  AdministratorDBA)负责全面管理和控制数据库系统。

7.数据库管理系统(DataBase Management System)是操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性,简称DBMS。用户通过 DBMS 对数据库进行存取、访问,数据库管理员也通过 DBMS 进行数据库的维护工作,许多针对数据管理和维护的操作也都由 DBMS 来完成。

 

8.目前流行的数据库管理系统有:OracleMS-SQL  SERVER MY SQLDB2VFP,ACCESS,等。



9. 数据库管理系统的功能主要包括:数据定义,数据存取,数据库运行管理,数据库维护,数据库传输及效率。

 

10. 数据模型是现实世界数据特征的抽象,是现实世界的模拟,

11. 数据库技术中的数据模型是现实世界中数据和信息在数据库中的抽象与表示。数据模型应满足三方面要求:一是能比较真实地模拟现实世界;二是容易为人所理解;三是便于在计算机中实现。

 

12. 数据模型可分为概念模型和结构数据模型。概念模型是按用户的观点对数据和信息进行抽象,主要用于数据库设计;结构数据模型是按计算机的观点建模,主要用于数据库管理系统的实现。

 

13. 实体(Entity:实体是指客观存在并可以相互区别的事物。属性(Attribute:实体所具有的某一特性称为实体的属性,一个实体由若干个属性来描述。码(Key:唯一标识实体的属性集称为码。域(Domain:属性的取值范围成为该属性的域。

 

14.实体型之间的联系可以分为三类:一对一联系(1:1, 一对多的联系(1:n, 多对多联系(m:n)。

例:如果一个实体A对应1个实体B,则A与B之间的联系是?(必然是一对一的联系?错!)。

判断题:

(1)E-R图转换为关系模式时,所有的联系都必须转换为独立的关系模式。(ERR!)

(2)E-R图转换为关系模型时,实体必须转换为关系模式,联系一定不能转换为关系模式。(ERR!)

 

例:举例阐述实体间有哪几种联系?

一对一:观众对座位

一对多:班级对学生

多对多:项目对员工

 

,15. 实体-联系方法(Entity-Relationship),该方法用E-R图来描述现实世界的概念模型。实体型:用矩形表示,矩形框内写明实体名。属性:用椭圆表示,椭圆内写明属性名,用无向边将属性与实体连接起来。联系:用菱形表示,菱形框内写明联系明,通过无向边与有关实体连接起来,同时在无向边上注明联系类型。

练习题:

(1)属于概念模型的术语( C  )。

A、 索引和视图  B、文件和文件组    C、联系与实体   D、 存储过程与触发器

(2)判断题:E-R图可以转换为关系模型,也可以转换为层次模型和网状模型。(Y)

 

3)解释说明E-R图三要素。

实体、联系、属性。 

实体:现实世界可以区别于其他是对象的“事件”或“物件”

联系:实体各属性之间所具有的关系。

属性:一个实体集所具有的共同性质。

 

16.数据库管理系统采用的数据模型主要有:层次模型、网状模型和关系模型。

另有:面向对象模型,关系-对象模型,等。

 

17.关系模型用二维表的形式表示实体和实体间联系的数据模型。关系模型是目前使用最广泛的数据模型。使用关系模型的数据库称为关系型数据库。关系模型由数据结构、关系操作、关系的完整性三部分组成。

 

18.关系模式的一般表示为:

关系名(属性1,属性2,属性3,…属性n

 例:学生(学号,姓名,性别,出生日期)。

 

19.可以将数据库的结构分为数据库(DataBase)、表Table)以及记录(Record3 层。在一个数据库内可包含多个表,而每个表内存储着多条记录。主键Primary Key是能辨识记录的最小字段组,是表中行的唯一标识的候选关键字。外键(Foreign Key)用于建立和加强两个表数据之间的链接的一列或多列,是指表中指向其他表 Primary Key 的字段。

 

判断题:一个表的主键可以是一个属性也可以是多个属性。(Y)

 

20.属性(Attribute)和值域(Domain):二维表中的列(字段、数据项)称为属性,列值称为属性值,属性值的取值范围称为值域。元组(Tuple):二维表中的行(记录的值)称为元组。

21.关系操作的特点是集合操作,即操作的对象和结果都是集合。关系操作主要包括查询(Select)、插入(Insert)、删除(Delete)、修改(Update)等操作。

 

22.数据完整性是指关系模型中数据的正确性与一致性。关系模型允许定义的完整性约束包括实体完整性、域完整性、参照完整性和用户自定义的完整性约束。实体完整性就是指要求关系中的元组在组成主关键字的属性上不能为空。域完整性是指要求表中列的数据必须具有正确的数据类型、格式以及有效的数据范围。参照完整性就是指关系之间不能引用不存在的元组。用户定义的完整性就是针对具体应用中的数据所必须满足的要求而定义的约束条件。

23.关系数据库主要支持选择、投影和连接关系运算,它们源于关系代数中并、交、差、选择、投影和连接(也称联接)等运算。

从一个表中找出满足指定条件的记录行形成一个新表的操作称为选择。选择是从行的角度进行运算得到新的表,新表的关系模式不变,其记录是原表的一个子集。

从一个表中找出若干字段形成一个新表的操作称为投影。投影是从列的角度进行的运算,通过对表中的字段进行选择或重组得到新表。

选择和投影都是对单表进行的运算操作,在实际应用中,经常需要从两个或多个表中选择满足条件的记录。连接是将两个表中的记录按一定的条件横向结合起来形成一个新表。

连接运算分为很多种类型,实际应用中大多是自然连接。自然连接是指当两个表中有相同的字段时,将字段值相等的记录连接起来,并且去掉重复字段形成新表。

连接分为内连接(包括相等联接和自然联接)与外连接(包括:左向外联接、右向外联接或完整外部联接)。

 

例如:要查询所有学生的选课情况,包括已经选课的和还没有选课的学生,查询语句为: SELECT学生表.学号,姓名,班级,课程号,成绩 FROM学生表 LEFTOUTER JOIN 选课表 ON 学生表.学号=选课表.学号

左外连接查询中左端表中的所有元组的信息都得到了保留。

 

2)右外连接(RIGHTOUTER  JOIN

右外连接与左外连接类似,只是右端表中的所有元组都列出,限制左端表的数据必须满足连接条件,而不管右端表中的数据是否满足连接条件,均输出表中的内容。
   
例如:同上例内容,查询语句为: SELECT学生表.学号,姓名,班级,课程号,成绩  FROM  学生表  RIGHTOUTER JOIN  选课表 ON  学生表.学号=选课表.学号

右外连接查询中右端表中的所有元组的信息都得到了保留。

3)全外连接(FULL OUTER   JOIN)
全外连接查询的特点是左、右两端表中的元组都输出,如果没能找到匹配的元组,就使用NULL来代替。
   
例如:同左外连接例子内容,查询语句为
    SELECT
学生表.学号,姓名,班级,课程号,成绩 FROM 学生表 FULL OUTER  JOIN  选课表  ON  学生表.学号=选课表.学号
全外连接查询中所有表中的元组信息都得到了保留。

 

连接查询分为内连接查询与外连接查询。

 

练习题:

(1)实现两个表的查询只能内连接,实现多个表的查询是用外连接。(ERR!)

(2)连接查询R和S,想在显示中保留R的所有行应该使用( )。

     A、R全外连接S

    B、 R内连接S

   C、右外连接S

   D、R左外连接S

 

(3)描述数据库E-R图用( )。

A、物理模型     B、概念模型      C、存储模型      D、 逻辑模型

 

(4)员工表(员工编号,姓名,性别,年龄,职称),查询职称为“高工”的所有员工信息应使用()关系运算。

A、投影 B、连接  C、选择 D、 笛卡儿积

 

24.数据库引擎(SQL Server Database EngineSSDE)是Microsoft SQL Server 系统的核心服务,负责完成业务数据的存储、处理、查询和安全管理。分析服务(Analysis Services)为商业智能提供联机分析处理和数据挖掘功能。报表服务(Reporting Services     报表服务基于服务器的新型数据报表服务平台。集成服务(Integration Services     集成服务是一个数据集成平台,用户可以使用它从不同的数据源提取、转换和合并数据,并将其移至单个或多个目标。

 

25SQL Server2000200520082014,等)的版本,通常有:企业版,标准版,开发版,工作组版,精简版。各版安装环境要求有所不同。要求掌握安装方法及步骤,并成功安装过。

26.掌握E-R图的设计(画法)。

27.关系模型的规范化。在数据库设计过程中数据库结构必须要满足一定的规范化要求,才能确保数据的准确性和可靠性。这些规范化要求被称为规范化形式,即范式。

在关系模式R中的每一个具体关系R中,如果每个属性值都是不可再分的最小数据单位,则称R是第一范式的关系。第二范式的设计目标是简化实体的设计,以确保每个非主键字段对于主键是惟一确定的。关系模式中的主键X、属性组Y及非属性组Z若不具有这样的关系:XYYZ则称此关系模式满足第三范式。

范式由低到高依次为1NF,2NF,3NF,4NF, 5NF。在关系数据库中,对关系模式的基本要求是满足第一范式,实际应用中通常要求满足第三范式。

规范化:将一个低一级范式的关系模式分解为若干个满足高一级范式关系模式的集合的过程。


   例:设有关系模式   R(职工编号,姓名,日期,日营业额,部门名,部门经理),该模式统计商店里每个职工的日营业额,以及职工所在的部门和经理信息。规定:每个职工每天只有一个营业额;每个职工只在一个部门工作;每个部门只有一个经理。

  1)请把R分解成2NF模式集;

  2)请将R分解成3NF模式集。

解:(1R不是2NF模式。

            R分解成

R1(职工编号,姓名,部门名,部门经理)

R2(职工编号,日期,日营业额)

         此时,R1R2都是2NF模式。

     2R2已是3NF模式。但在R1中存在传递依赖:职工编号→部门经理

  R1不是3NF模式。

R1 分解为:

   R11(职工编号,姓名,部门名),

R12(部门名,部门经理)

所以,R分解成:

  R2(职工编号,日期,日营业额)

  R11(职工编号,姓名,部门名)

  R12(部门名,部门经理)


28.数据库设计步骤: 需求分析, 概念结构设计, 逻辑结构设计, 数据库的物理设计, 数据库实施, 数据库的运行和维护。.

数据库设计的过程(六个阶段)

 (1)需求分析阶段

准确了解与分析用户需求(包括数据与处理)

是整个设计过程的基础,是最困难、最耗费时间的一步

(2)概念结构设计阶段

是整个数据库设计的关键

通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型

(3)逻辑结构设计阶段

将概念结构转换为某个DBMS所支持的数据模型

对其进行优化

(4)数据库物理设计阶段

为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)

(5)数据库实施阶段

运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果

建立数据库,编制与调试应用程序,组织数据入库,并进行试运行

(6)数据库运行和维护阶段

数据库应用系统经过试运行后即可投入正式运行。

在数据库系统运行过程中必须不断地对其进行评价、调整与修改

   设计特点:  在设计过程中把数据库的设计和对数据库中数据处理的设计紧密结合起来将这两个方面的 需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计

 

29.数据库的存储结构可分为逻辑结构和物理结构。

数据库的逻辑存储结构指的是数据库是由哪些性质的信息所组成,SQL Server的数据库不仅仅只是数据的存储,所有与数据处理操作相关的信息都存储在数据库中。

     每个数据库都由以下几个部分的数据库对象所组成:关系图、表、视图、约束、用户、角色、规则、默认、索引、用户自定义数据类型、用户自定义函数、存储过程和触发器等。

数据库的物理存储结构是讨论数据库是如何在磁盘上存储的,数据库在磁盘上是以文件为单位存储的,由数据文件和事务日志文件组成,其中数据文件又分为主数据文件和次数据文件。一个数据库至少应该包含一个主数据文件和一个事务日志文件。

SQL  SERVER: 每个数据库都有且仅有一个主数据文件,文件名默认与数据库名称相同,文件扩展名为.mdf。一个数据库可以有零个或多个次数据文件,文件名由用户设置,文件扩展名为.ndf。事务日志文件:用于存放事务日志,每个数据库可有一个或多个日志文件,文件名默认为“数据库名称_log”,文件扩展名为.ldf

    练习题:(1)数据文件、事务日志文件都属于数据库文件?(Y)

(2)SQL Server主要包括哪两类文件 (   )。

  A、数据文件和事务日志文件  B、图片文件和文本文件      

C、函数文件和数据文件      D、 源文件和可执行文件

(3)如果想不留下事务日志的清空A数据表中的数据,应使用(   )。

A、 TRUNCATE TABLE A    

B、 DROP TABLE A   

C、 ALTER TABLE A  

D、 DELETE TABLE A

 

说明:

1)truncate和 delete只删除数据不删除表的结构(定义) 

     drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. 

2)delete语句是dml,这个操作会放到rollbacksegement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发. 

    truncate,drop是ddl, 操作立即生效,原数据不放到rollbacksegment中,不能回滚. 操作不触发trigger. 

3)delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 

   显然drop语句将表所占用的空间全部释放 

   truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;   truncate会将高水线复位(回到最开始). 

4)速度,一般来说:drop> truncate > delete 

5)安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及。

使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.想删除表,当然用drop 。

想保留表而将所有数据删除.如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.

 

判断题:

(1)一个数据文件可以属于多个文件组也可以属于多个数据库。(ERR!)

(2)在SQL Server数据库中,主数据文件的扩展名是ndf。(ERR!)

(3)基本表的数据只能用视图来查看,相当于在一个基本表上的投影与选择。(YES!)

(4)实体完整性是由检查约束和默认约束来实现的。(ERR!)

(5)创建存储过程后,其脚本可以被加密。(YES!)

(6)完全备份、事务日志备份SQL Server支持、差异备份SQL Server不支持。(ERR!)

 

简答题:

(1)简述事务的特性。

事务是用户定义的数据库操作的集合,这些操作作为一个完整的有机工作单元,要么全部正确执行,要么全部不执行。

原子性,一致性,隔离性,持久性

 

 

30. SQL  SERVER: 系统数据库有:Master数据库,Tempdb数据库,Model数据库,Msdb数据库,等。示例数据库有:AdventureWorks AdventureWorksDWAdventureWorksAS


31.网络数据库系统是基于计算机网络来管理网络中不同节点中的数据的数据库系统。数据库应用系统是为特定应用环境开发的,在数据库管理系统(DBMS)支持下建立的计算机应用系统,简写为DBAS

 

32.  数据库设计是指对于一个给定的应用环境,构造最优的数据模型,利用DBMS,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。

 

33.数据库设计包括结构设计和行为设计。

结构设计是指按照应用要求,确定一个合理的数据模型。数据模型是用来反映和显示事物及其关系的。结构设计的结果简单地说就是得到数据库中表的结构。结构设计要求满足:能正确反映客观事物;减少和避免数据冗余;维护数据完整性。

   行为设计是指应用程序的设计,即利用DBMS及相关软件,将结构设计的结果物理化,实施数据库,如完成查询、修改、添加、删除、统计数据,制作报表等。行为设计要求满足数据的完整性、安全性、并发控制和数据库的恢复。 

 

34. E-R图与关系模型转换

 



课程(课程号,课程名,学时,类别)

学生(学号,姓名,性别,专业,出生日期,照片)

选修(学号课程号,分数)

 

练习:  请参与华夏后勤集团旅行部开发<旅行管理信息系统>,经调查分析知道:

线路(线路编号,线路名称,线路描述),

景点(景点编号,景点名称,地点,景点描述)

导游(工号,姓名,等级)

旅游团队(团队编号,人数,开始日期,截止日期),

其中,每条线路有多名导游,但一名导游只负责一条线路;每条线路由多个景点组成,每个景点可有不同线路经过;每条线路可同时存在多个旅游团队,每个团队只可旅游一条线路。

请依照以上描述,设计涉及景点、线路、旅游团、导游等实体的E-R模型,要求标明实体名、联系名、联系类型、属性。

 

解: (参考)

(1)设计E-R模型,要求标明实体名、联系名、联系类型、属性。

(上图 属性省略)

 

35.确定数据库的物理结构的步骤:(1)确定数据表字段及其数据类型;(2)确定哪些字段允许空值;(3)确定主键;(4)确定是否使用约束、默认值和规则等;(5)确定是否使用外键;(6)是否使用索引。等

 

36. 关系数据库标准语言SQLStructured Query Language),又称为结构化查询语言,是关系型数据库管理系统中最流行的数据查询和更新语言,用户可以使用SQL语言对数据库执行各种操作,包括数据定义、数据操纵和数据控制等与数据库有关的全部功能。

1)数据定义功能(Data Defination):通过数据定义语言DDLcreatealterdrop)来实现。它用来定义数据库的逻辑结构,包括定义表、视图和索引。数据定义只是定义结构,不涉及到具体数据。

2)数据操纵功能(Data Manipulation):通过数据操纵语言DML (selectinsertupdatedelete)实现。包括数据查询和数据更新两大类操作。数据更新包括插入、删除和修改。

3)数据控制功能(Data Control):通过数据控制语言DCL(如:grant……revoke begin transaction ……commit/rollback)实现。包括对数据的安全性控制、完整性规则的描述以及对事务的定义、并发控制和恢复等。

 

判断题:

(1)SQL中的数据操纵语言(DML)用于实现数据增、删、改、查的数据操作。(OK!)

 

37. 常用的系统存储过程

1)更改数据库名称   Sp_renamedb 原数据库名,新数据库名

sp_rename原对象名, 新对象名

38. 创建数据库、修改数据库、删除数据库。在SSMS(平台)中完成;利用SQL语句完成。

1 CREATE  DATABASE database_name 。。。

2 ALTER  DATABASE database_name 。。。

3 DROP  DATABASE { database_name } [ ,...n ]

利用数据库   USE  database_name

 

39. 收缩数据库   数据库使用一段时间后,时常会出现因数据删除而造成数据库中空闲空间太多的情况,需要使用收缩的方式来缩减数据库空间。可在数据库属性选项中选择“Auto shrink”选项,让系统自动收缩数据库,也可用人工的方法来收缩。

    使用TSQL命令收缩数据库:DBCC  SHRINKDATABASE(数据库名,参数[{NOTRUNCATE|TRUNCATEONLY}]),DBCC  SHRINKFILE(文件名,参数|[,EMPTYFILE][{NOTRUNCATE|TRUNCATEONLY}]

40. 分离和附加数据库    分离和附加数据库的主要目的就是移动数据库的位置。

练习题:

(1)有人说,“删除数据库,其实就是分离数据库”。对吗?(ERR!)

(2)数据库分离与附加的描述,不正确的是(   )。

A、移动数据库前,最好为数据库做一个完整备份

B、  要确保数据库移动的目标有足够的空间,满足数据库的增长

C、分离数据库并没有将数据库文件从磁盘上删除

D、             进行数据库分离操作时,可以同时进行更新操作

 

41. 数据类型   

数字数据(整型 intbigintsmallinttinyintbit,精确数值型(decimalps)、numericps),浮点数值型(floatreal 

  字符数据( char(定长字符型)、varchar(变长字符型)、text

nUicode字符型——双字节数据类型,ncharm)、nvarchar m)、ntext m,长度为n=2*m.  )

 货币数据(money smallmoney

 日期和时间数据(datetime smalldatetime ,默认的格式是:MM DD YYYY hh:mm A.M/P.M。)

 二进制和图像型 (binary(n) varbinaryn)、image  )

 其他数据类型((较少使用)  sql_varianttabletimestampuniqueidentifier,等)

 

问:在SQL Server中,datetime是什么类型?(日期时间类型)

 

 

42.     SQL Server的主要列属性

42.  1)允许空(NULLNOT NULL

       2)标识规范(IDENTITY  定义标识列需要指定两个值:种子值和增量值。

标识列必须定义为整型(bigint intsmallinttinyint)或精确数类型(decimal(P,0)numeric(P,0)),但通常将标识列的类型定义为intbigint

43.     创建对象   使用SSMS创建,使用T-SQL 创建

1)使用T-SQL 创建表

 CREATE TABLE 表名

      (

      列名数据类型和长度列属性1,

      列名数据类型和长度列属性2,

         ……    ……

      列名数据类型和长度列属性n     )


判断题:

(1)创建数据表时,表的每一列没必要都指明数据类型和长度。(错!)

 

(2) 使用T-SQL语句创建默认值:
CREATE DEFAULT default_name
AS default_description

: CREATE DEFAULT 入馆时间  AS getdate()

3)使用T-SQL语句创建规则

CREATE RULE  rule_name
AS  Rule_description

例: create rule 分数 as  @分数 between 0 and 100

4)绑定规则  就是将定义好的规则绑定在数据库表的列上,使该列具有规则指定的完整性条件。

exec sp_bindrule 规则名,‘对象名’

例:sp_bindrule 分数,'’学生成绩.分数

   sp_bindrule 分数,'课程评价.评价'


解除规则的语法为 Exec sp_unbindrule ‘对象名’

删除规则  Drop rule  规则名

5)创建视图

视图(View):是从一个或多个基本表导出的表。视图不是真实存在的物理表,而是一张虚表。视图(索引视图除外)所对应的数据并不实际地以视图结构存储在数据库中,而是存储在试图所引用的表中。

CREATE   VIEW  视图名 [(列名[,…n] )]

[WTTH  AS

              查询语句

              [WTTH CHECK  OPTIN]  <视图属性>]

练习题:

(1)视图创建后,就存储了数据。(ERR!)

(2)以下对视图说法正确的是(    )。

A、视图显示的数据可来自多个基础表   B。视图中的数据不一定都来源于基础表

C.  可以基于一个视图,一次性地更改多个基础表的数据

D. 视图存在于内存中,每次重新启动DBMS时,视图便会自动消失

 

(3)简述基本表与视图的主要区别。

参考:视图是一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表,可以和基本表一样能被查询,被删除,但对视图的增、删、改操作则有一定限制。

 

判断题:视图能用来查看数据,也可以在视图上进行数据更新。(YES!)

 

简述什么是视图,视图具有哪些优点?

   视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。

 视图:查看图形或文档的方式。
视图是从一个或多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。和表一样,视图也是包括几个被定义的数据列和多个数据行,但就本质而言这些数据列和数据行来源于其所引用的表。
所以视图不是真实存在的基础表而是一张虚表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。
视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样又在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改(有一定的限制)、删除。
当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。


6建立索引

数据库中的索引使用户可以快速找到表或索引视图中的特定信息。索引包含从表或视图中一个或多个列生成的键以及映射到指定数据的存储位置的指针。

通过创建设计良好的索引,可以显著提高数据库查询和应用程序的性能。

按存储结构的不同,可将索引分为两大类:聚集索引和非聚集索引。而根据数据库的功能,可在数据库设计时创建三种类型的索引:聚集索引、唯一索引和主键索引。

索引对数据库的性能具有重要作用,通过索引可减少查询时间、提高查询效率。

在使用索引时,如果频繁修改表中的数据,操作效率会降低,因为每次修改数据,数据库都会重建索引。所以对更新频繁的表,应慎用索引。

   CREATE  [UNIQUE][CLUSTERED NONCLUSTERED]  INDEX index_name

ON  table_name |view_name    [column_name [1…n] [ ASC | DESC]]

 

练习题:(1)为数据表的每个字段都建立索引,可以提高数据库的查询速度与更新速度。(ERR!)

(2)建立索引的目的是(  )。

A、提高检索速度  B、节省存储空间   C.提高检索和更新速度   D、 增强数据安全性

(3)学生表﹝学号,姓名,性别,年龄,家庭住址﹞,按年龄降序列出所有学生,且相同年龄的学生按姓名升序排列。则排序子句应该是﹝  ﹞。

A、 Order By 年龄,姓名            B、 Order By 姓名,年龄 Desc

B、 Order By 年龄 Desc,姓名       D、 B项与C项都正确

判断题: 唯一性索引一定是聚集索引。(ERR!)

(4)简述索引的优点。

1) 可以大大加快数据的检索速度。

2) 通过创建唯一性索引,确保每行数据的唯一性。

3)  加速表与表之间的连接。

4)  在使用分组子句和排序子句时,可以显著提高查询效率。

 


数据库索引的创建原则

建立索引的原则:

(1) 定义主键的数据列一定要建立索引。

(2) 定义有外键的数据列一定要建立索引。

(3) 对于经常查询的数据列最好建立索引。

(4) 对于需要在指定范围内的快速或频繁查询的数据列;

(5)经常用在WHERE子句中的数据列。

(6) 经常出现在关键字order bygroup bydistinct后面的字段,建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则索引不会被使用。

(7) 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。

(8) 对于定义为textimagebit的数据类型的列不要建立索引。

(9) 对于经常存取的列避免建立索引

(10) 限制表上的索引数目。对一个存在大量更新操作的表,所建索引的数目一般不要超过3个,最多不要超过5个。索引虽说提高了访问速度,但太多索引会影响数据的更新操作。

(11) 对复合索引,按照字段在查询条件中出现的频度建立索引。在复合索引中,记录首先按照第一个字段排序。对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推。因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用,因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用。


备注:设定某个列为主键时,是否默认为其创建索引?

答:一般创建主键时,大多数数据库会自动创建一个唯一索引,一般来说外键肯定是会被经常做连接查询的字段,所以数据库管理系统会自动加上索引。mysql / oralce / sql server 等都会自动添加。

 

(7)创建存储过程

分为系统存储过程和用户自定义存储过。

用户自定义存储过程是指封装的由用户创建,能完成某一特定的功能的可重用代码的模块或例程。存储过程可以接受输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言 (DDL) 和数据操作语言 (DML) 语句,然后返回输出参数。

CREATE  [ PROC | PROCEDURE]    存储过程名 

       [ { @参数名称 参数数据类型 }  [ = 参数的默认值 ]      

        [ OUTPUT ]  ]

        [ ,...n ]

        [ WITH ENCRYPTION]

[WITH RECOMPILE ]

     AS

        sql_statement  

 

u   执行不带参数的存储过程语法结构如下:

    EXEC[UTE] 存储过程名

u   执行输入参数的存储过程两种方法:

1)使用参数名传递参数值

EXEC  存储过程名 [@参数名=参数值 ][DEFAULT] […n]

2)按位置传递参数值

EXEC 存储过程名  [参数值1,参数值2…]

 

常用系统存储过程:

u   sp_tables:返回可在当前环境中查询的对象列表。

u   sp_stored_procedures:返回当前环境中的存储过程列表。

u   sp_rename:在当前数据库中更改用户创建对象的名称。此对象可以是表、索引、列、别名数据类型。

u   sp_renamedb:更改数据库的名称。

u   sp_help:报告有关数据库对象(sys.sysobjects 兼容视图中列出的所有对象)、用户定义数据类型或 SQL Server 2005 提供的数据类型的信息。

u   sp_helptext:示用户定义规则的定义、默认值、未加密的 Transact-SQL 存储过程、用户定义 Transact-SQL 函数、触发器、计算列、CHECK 约束、视图或系统对象(如系统存储过程)。

u   sp_who:提供有关 Microsoft SQL Server Database Engine 实例中的当前用户和进程的信息。

u   sp_password:为 Microsoft SQL Server 登录名添加或更改密码。

 

判断:题带参数的存储过程,可以增加其调用灵活性将。(OK!)

SQLSERVER系统本身没有定义好的存储过程。(ERR!)

 

44.     修改表  ALTER TABLE

     通过SQL Server ManagementStudio修改表的定义

    

45.     删除表  Drop Table 表名

46.     对象命名规之一: SQL Server 2005中,不允许存在(服务器名,数据库名,拥有者名,对象名)等4部分完全相同的数据库对象。

47.     表数据的添加、修改和删除,SQL Server Management Studio管理表数据,用T-SQL语句。

     简单的INSERT语句,使用默认值添加数据,使用INSERT…SELECT语句添加多行数据

修改表中的数据(UPDATE SET      

UPDATE   表名  

SET  column_name=value [,column_name=value]

    [FROM table_name]

[WHERE  condition ]


删除表中的数据  DELETE 

 

48.     要求熟练掌握创建数据表:数据表的建立,修改表的定义,数据表的改名,表数据的添加、修改和删除数据。

NSERT语句语法插入一条记录,  格式:

INSERT  [INTO] 表名  [(column_list)]

VALUES  ( { DEFAULT |NULL |expression }[,...n] )

插入多条记录, INSERT  [INTO] 表名  [(column_list)]

SELECT column_list  FROM table_list   WHERE search_condition

删除记录:  DELETE  [FROM]   表名  [WHERE condition]

其中,condition指定删除行的条件。

49.     约束定义:是 SQL Server提供的自动保持数据库完整性的一种方法。约束分类有:空值(NULL)约束,主键约束(Primary Key Constraint),唯一键约束(Unique Constraint),外键约束(Foreign Key Constraint),检查约束(Check Constraint),默认约束(Default Constraint)

50.     在数据库应用中,最常用的操作是查询,它是其他操作的基础,是数据库最基本也是最重要的功能。查询:在SQL Server中找出满足特定条件的记录,以及对这些记录作汇总、统计和排序,这些操作统称为“查询”,由SELECT语句实现。

50.SELECT <输出列表>   [INTO <新表名>]   FROM  数据源列表

50.[ WHERE <查询条件表达式> ]

50. [GROUP BY <分组表达式>  [HAVING <过滤条件> ] ]

50.  [ ORDER BY <排序表达式> [ ASC | DESC ] ]

练习题:(1)简述Where子句与Having子句的区别。

   (参考):Having是筛选组,而where是筛选记录,分组筛选的时候应having;其它情况用where。

 

判断题: 在SELECT查询语句的WHERE子句部分,可以再使用SELECT语句。(OK)

SQL Server身份验证有两种模式:Windows身份验证模式和混合身份验证模式。(YES!)

Groupby 分组统计时,应使用HAVING语句对分组进行筛选,而不是WHERE语句。(YES!)

唯一索引不一定是主键索引,但主键索引必然是唯一索引。(YES!)

 

从职工表(编号,姓名,生日,职称)中查询所有职工的姓名和生日应使用( A )运算。

A、投影        B、 选择     C、 连接     D、 笛卡儿积

 

SQL Server辅数据文件的扩展名为( B )。

    A、 mdf      B、 ndf           C、 ldf          D、 idx

 

51.     SELECT子句查询,格式为:

51.    SELECT [ ALL | DISTINCT ]

51.    [ TOP n [ PERCENT ] [ WITH TIES ] ]  < select_list >

51.    FROM < 表名或视图名 > [, < 表名或视图名 > ]

52.     例:(1  查询统计男女员工的平均工资。

select性别, avg(工资)  as  平均工资  from 员工  group by 性别

2)查询统计各部门男女员工的平均工资。

   select 部门编号,性别,avg(工资) as 平均工资 from 员工

   group by 部门编号, 性别

3)在销售订单表中,统计目前各种商品的订购总数,再按订购总数从高到低进行排序。

   select 商品编号,sum(订购数量) as 订购总数 from 销售订单

    group by 商品编号 order by 订购总数 desc

4)在员工表分别查询统计部门编号为12的员工平均工资。

select 部门编号,avg(工资)  as 平均工资 from 员工

     group by 部门编号 having 部门编号 in(1,2)

 或:select 部门编号,avg(工资) as 平均工资 from 员工

       where 部门编号 in(1,2)  group by 部门编号

 5)对员工表中部门编号为12的员工工资,按照其部门编号生成平均工资和明细行

     select 姓名, 工资,部门编号 from 员工  where 部门编号 in(1,2)

  order by 部门编号  compute avg(工资) by 部门编号

 6)查询员工工资大于同部门员工平均工资的员工姓名和工资。

  select 姓名,工资  from 员工as  a

     where 工资>( select avg(工资) from 员工as b

                    where b.部门编号=a.部门编号  )

53.  学会使用Transact-SQL语言对数据库进行应用编程,以提供数据库应用系统的开发能力。Transact-SQL 语言的分类

1)数据定义语言DDL:用来创建数据库和数据库对象的命令,绝大部分以CREATE开头,如CREATE TABLE 等。

2)数据操作语言DML:用来操作数据库中各种对象,对数据进行修改和检索。DML语言主要有四种:SELECT(查询)、INSERT(插入)、UPDATE(更新)和DELETE(删除)。

3)数据控制语言DCL:用来控制数据库组件的存取许可、权限等命令,GRANTREVOKE

4)事务管理语言TML:用于管理数据库中的事务的命令,如BEGIN TRANSACTION, COMMIT,ROLLBACK

练习:(1)哪两个事务同时对同一个数据库中同一数据进行操作不会引起冲突 ( )。

A、两个SELECT    B、一个SELECT和一个DELETE

C、 两个UPDATE                  D、一个DELETE和一个SELECT


5)其他语言元素:如标识符、数据类型、流程控制和函数等。

54. 根据常量值的不同类型,常量分为字符串常量、二进制常量、整型常量、实数常量、日期时间常量、货币常量和惟一标识常量。

55. SQL Server提供两种变量:用户自己定义的局部变量和系统提供的全局变量。

1)局部变量   用户自己定义的变量称为局部变量。局部变量用于保存特定类型的单个数据值的对象。

 定义格式: DECLARE  @局部变量名  数据类型 [ ,...n]

局部变量的赋值

SET   @局部变量名 = 表达式[,n](一次只能给一个变量赋值)

SELECT  @局部变量名 = 表达式[,n] [FROM 子句] [WHERE 子句] (一次可以给多个变量赋值)

56. 全局变量由系统定义和维护的变量,用于记录服务器活动状态的一组数据。全局变量名由@@符号开始。用户不能建立全局变量,也不可能使用SET语句去修改全局变量的值。在SQL Server2005 中,全局变量以系统函数的形式在使用。

57. 流程控制语句

1BEGIN END 语句

BEGIN

    {

         语句1

         语句2

        

     }

   END

2IFELSE语句   IFELSE语句实现程序选择结构。它的语法格式如下。

  IF   逻辑表达式

         { 语句块1 }

    [ ELSE

         { 语句块 2 }

    ]

3WHILECONTINUEBREAK语句

     WHILE 语句实现循环结构。如果指定的条件为真,就重复执行语句块,直到逻辑表达式为假。它的语法格式如下。

WHILE   逻辑表达式

  BEGIN

        语句块1

          [CONTINUE ]

         [BREAK ]

        语句块2

 END

4Goto语句

5RETURN语句   语法格式: RETURN [ 整数表达式 ]

6WAITFOR语句实现语句延缓一段时间或延迟到某特定的时间执行。语法格式:WAITFOR  { DELAY 'time' | TIME 'time' }

7CASE 语句

 

58. 在销售管理数据库中,查询员工的平均工资是否超过5000元,并显示相关信息。

declare @avg money

select @avg=avg(工资) from 员工

   if @avg>5000

   begin

    print @avg

    print '员工的平均工资超过5000'

   end

  else

    begin

   print @avg

  print '员工的平均工资不超过5000'

   end

 

59. Transact-SQL 编程语言中提供丰富的函数。函数可分系统定义函数和用户定义函数。系统定义函数中最常用的数学函数、字符串函数、日期时间函数、聚合函数、系统函数、系统统计函数的最常用的部分。

                                   

 

 函数名

 
 

 

 
 

AVG 

 
 

返回一组值的平均值。

 
 

COUNT

 
 

返回一组值中项目的数量。(返回值为int类型)。

 
 

COUNT_BIG

 
 

返回一组值中项目的数量。返回值为bigint类型)。

 
 

MAX

 
 

返回表达式或者项目中的最大值。

 
 

MIN

 
 

返回表达式或者项目中的最小值。

 
 

SUM

 
 

返回表达式中所有项的和,或者只返回DISTINCT值。SUM只能用于数字列。

 
 

STDEV

 
 

返回表达式中所有值的统计标准偏差。

 
 

STDEVP

 
 

返回表达式中所有值的统计标准偏差。

 

 

 

 

60.查询数据库LibraryBOOKS表的图书名,类编号,价格,要求按类编号排序输出并输出各类图书的平均价、最高价、最低价。

USE Library

GO

SELECT 图书名,类编号,价格  FROM Books   order by  类编号,价格

SELECT 类编号,AVG(价格)  平均价 ,总价格=SUM(价格),

最高价=MAX(价格),最低价=MIN(价格),图书总数=COUNT(图书编号)

FROM Books

GROUP BY (类编号)

 


/*   

USE  Library

SELECT   类编号, AVG(价格)  AS 平均价 ,总价格=SUM(价格),

最高价=MAX(价格),最低价=MIN(价格),图书总数=COUNT(图书编号)

FROM Books     GROUP BY 类编号


/*

USE  Library

SELECT    AVG(价格)  AS 平均价 ,SUM(价格)  总价格,

最高价=MAX(价格),最低价=MIN(价格),图书总数=COUNT(图书编号)

FROM Books  


61.创建一个统计各部门员工人数的视图,包括部门名称和部门员工总人数。

create view 部门人数

     as

        select 部门名称,count(*)  as 部门员工总人数

          from 员工,部门

              WHERE 员工.部门编号=部门.部门编号

                    group by 部门名称

 

查询: 

SELECT * FROM  部门人数

 

62.检索员工工资最高的3名员工信息。

Select  top 3 *  from  员工 order by 工资 desc

63检索员工工资最高的3名员工信息,并将跟输出的最后一条记录值相同的记录也一并输出。

select top 3 with ties *  from  员工 order by 工资desc

64.将员工表中的所有员工的人数、最高工资、最低工资和平均工资、工资总和等数据存放入“员工工资信息”表中。

 

select count(员工编号) as 员工人数,max(工资) as 最高工资,min(工资) as 最低工资,avg(工资)  as 平均工资,sum(工资) as 工资总和   into 员工工资信息  from员工

 

查询:  SELECT  *  FROM   员工工资信息

65.统计公司员工的入职年数,输出结果包括员工姓名和入职年数。

Select 姓名, year(getdate()) -year(聘任日期)  as 入职年数

from 员工

66.查询图书信息表中大于同类图书平均定价的图书名称和定价

select 图书名称,定价 from  图书信息 as a

where 定价>(select avg(定价) from 图书信息as b  where b.图书类别=a.图书类别)

 

66.编程计算 1+2+3+...+n

GREATE FUNCTION@k  int

AS

RETURN int

BEGIN

DECLARE @i int ,@s int,@n int

SET @n=@K

SET @i=1

SET @s=0   --定义两变量i,s

WHILE @i<=@n  --i的值大于n时,结束循环

BEGIN

SET @s=@s+@i

SET @i=@i+1

CONTINUE

END

PRINT '1+2+...+'+CONVERT(nvarchar(20),@n)+'的值是:'+CONVERT(varchar,@s)

END

RETURN @S

 

66.编程计算 1+2+3+...+n 的函数

 

CREATE FUNCTION fn_DateFormat8(@n  int )

RETURNS  int

AS

BEGIN

DECLARE @i int ,@s int

SET @i=1

SET @s=0   --定义两变量i,s

WHILE @i<=@n  --i的值大于n时,结束循环

BEGIN

SET @s=@s+@i

SET @i=@i+1

CONTINUE

END

RETURN

  @s

END

 

 

调用:SELECT  dbo.fn_DateFormat8(6 )

GO

调用:print '1+2+3...+'+CONVERT(nvarchar(20),100)+'= '+CONVERT(nvarchar(20),dbo.fn_DateFormat8(100))

GO

 

67.对库XSCJ的学生成绩表,创建用户自定义标量值函数pingjun,该函数通过输入某课程号,计算该课程的平均分。如:PRINT dbo.pingjun(‘101001’)就会显示101001---课程的平均分。


CREATE FUNCTION pingjun1(@kch CHAR(10)) RETURNS INT

AS

BEGIN

      DECLARE @pjfINT

      SET@pjf=(SELECT AVG(成绩) FROM 学生成绩表 WHERE 课程号=@kch)

      RETURN @pjf  END

 

---调用该函数,显示011课程的平均分

USE  XSCJ

SELECT dbo.pingjun1('011')  AS '011课程的平均分'

 ---调用该函数,显示全部课程的平均分

USE  XSCJ

SELECT DISTINCT 课程号, dbo.pingjun1(课程号) AS 平均分 FROM 学生成绩表

 

68.对库XSCJ,创建一个存储过程,要求根据输入的教师编号来显示教师姓名、职称,所在系和系主任名称。

USE XSCJ

GO

 

CREATE PROCEDURE  tea_depart1

@tea_num  char(4)

AS

SELECT 姓名,职称,系名,系主任

FROM 教师信息表,系信息表

WHERE 教师信息表.系号=系信息表.系号 AND 教师编号=@tea_num

 

例:调用此存储过程查询001职工的信息:

EXEC  tea_depart1  '001'

 

68.创建名为reminder的触发器,当用户向部门表中插入一条部门记录时,向客户端发--送一条提示消息“插入了一条记录!”。

create trigger remider

  on 部门

  after insert

  as

print '已插入了一条记录'

 

--验证触发器:

USE  销售管理

insert into 部门

    values(5,'财务部','李亮','主管公司财务信息')

 

USE  销售管理

insert into 部门

   values(6,'财务部','林小亮','主管公司财务信息')

 

69.创建一个触发器实现当向销售订单表添加一条记录时,自动修改商品表的库存数量和已售数量。

create trigger 销售

    on 销售订单

   after insert

   as

   update 商品

   set 库存数量=库存数量-订购数量,

        已售数量=已售数量+订购数量

   from 商品  join  inserted

   on  商品.商品编号=inserted.商品编号

   print '商品表已自动修改'

 

--执行下面语句,向销售订单表添加一条记录,观察是否自动修改商品表的库存数量和已售数量。

USE  销售管理

insert into  销售订单(销售订单号,商品编号,员工编号,客户编号,订购数量,订购日期)  values(98,60,2,1,12,GETDATE())

    

70.创建一个触发器,用于实现如下功能:当从部门表中删除记录时,不允许删除表中的数据,并给出信息提示。

create trigger 删除部门

   on 部门

  after delete

    as

     begin

    rollback

    print '不能删除部门表中的记录'

     end

 

--查看触发器'删除部门'的内容。

USE  销售管理

EXEC SP_HELPTEXT  '删除部门'

 

--删除触发器'删除部门'

USE   销售管理

IF  OBJECT_ID('删除部门','TR') IS NOT NULL

DROP  TRIGGER  trigger_admin

GO

 

71.(综合)数据库中三个表:课程表(课程号,课程名,学分,课时),学生表(学号,姓名,性别,年龄,籍贯,住房号),成绩表(学号,课程号,成绩),写出完成下述任务的SQL语句:

(1)向学生表增加一条数据,(1601,张三,男,20)。

    INSERT INTO 学生表(学号,姓名,性别,年龄)VALUES (‘1601’,‘张三’,‘男’,20)

(2)在课程表中,将K013号课程的课程名改为“数据库应用技术”,学分改为5。

     UPDATE 课程表 SET 课程名=‘数据库应用技术’,

WHERE课程号=‘K013’

(3)删除成绩表中课程号为K115的所有行。

DELETE成绩表   WHERE 课程号=‘K115’

(4) 按学号升序查询学生成绩信息,要求显示(学号,课程号,成绩)。

SELECT   学号,课程号,成绩 FROM 成绩表 Order  BY  学号

(5) 按学号升序查询‘数据库应用技术( 课程号:K013  )课程的学生成绩信息,要求显示(学号,姓名,课程名称,成绩,住房号)。

SELECT  S.学号,S.姓名,K.课程名称,C.成绩,S.住房号

FROM 课程表 K,学生表 S, 成绩表C

WHERE K.课程号=‘K013 and  K.课程号=C.课程号 and  c.学号=S.学号

  Order BY  S.学号


72. 编程序统计[成绩表]中各人(根据学号)选修课程的门数(数据库为[教务数据库])。

USE  [教务数据库]

GO

SELECT  学号,count(*) AS 门数

FROM [成绩表]

Group by 学号

GO


思考:编程序统计[学生表]中各专业班级的人数(数据库为[教务数据库])。

USE  [教务数据库]

GO

SELECT 专业班级,count(*) as 人数

FROM [学生表]

Group by 专业班级

GO


73. 编程序在[学生表]中,查询“19软件”班所有比“18软件”班的出生日期都早的学生信息(数据库为[教务数据库])

USE [教务数据库]y

GO

SELECT  *

FROM  学生表

WHERE 出生日期<ALL

( SELECT 出生日期

FROM 学生表

WHERE 专业班级 LIKE '18软件'

)  AND 专业班级 LIKE '19软件'

GO