热门关键字:  听力密码  听力密码  新概念美语  单词密码  巧用听写练听力

跟韩老师学SQL Server数据库设计与开发

中国水利水电出版社
    【作 者】韩立刚 【I S B N 】978-7-5170-5182-4 【责任编辑】周春元 张玉玲 【适用读者群】本专通用 【出版时间】2017-03-09 【开 本】16开 【装帧信息】平装(光膜) 【版 次】第1版第1次印刷 【页 数】324 【千字数】398 【印 张】18 【定 价】58 【丛 书】 【备注信息】
图书详情

    在软件设计和开发过程中,需求分析确定后,在开发软件前就需要先设计数据库,然后再编写代码。本书讲解的内容是软件开发人员必须要掌握的技术,先讲解如何根据项目的需求按关系型数据库设计规范设计数据库中的表,然后使用自己设计的数据库来学习SQL语句。

    本书完整地讲述了SQL语句中使用的变量、数据类型、注释行、运算符、常用函数,以及流程控制语句。从单表查询讲起,讲解使用WHERE筛选行将查询的结果分组、排序,然后讲解多表查询和数据汇总,讲解多表交叉联结、内联结、外联结、自联结,使用UNION合并查询结果集,使用聚合函数汇总查询结果,接着讲解了子查询、开窗函数和行列转换技术,实现数据完整性,创建和使用索引优化性能,在数据库中创建和使用视图简化查询,使用存储过程操作数据库,创建用户自定义函数,在SQL语句中使用自定义函数,使用触发器实现复杂的业务逻辑,使用事务实现数据的完整性和一致性。

    范式、多表联接、联接查询、存储过程、索引、触发、事务、锁……这些核心概念你真的懂吗?

    用最好懂的方式水煮复杂概念,所有似懂非懂一剑封喉!

    超10年企业实战经验与多年大学授课经验完善结合!

    课本知识与企业需求无缝衔接,项目教学+案例教学+校企合作的完善实践!

    我最初学习数据库是2001年,感觉学习SQL语句很难,而且学完后时间稍微一长就忘了。现在回想起来,当时学习的难点非常关键的一点就是使用微软SQL Server 2000的示例数据库来学习,作为初学者,根本不知道Northwind数据库是用来做什么的,更不知道其中各个表之间的关系,也不知道为什么要把数据放到多张表,查询时再连接成一张表。使用陌生的数据库学习新知识自然带来不少困难,不理解数据库为什么要设计出多张表来存放数据以及各表之间的关系也就弄不清如何写多表联合查询的条件。

    独立为几家企业开发几款软件后熟悉了整个软件开发流程,从客户的需求分析到数据库设计,再到软件开发、测试部署和维护。在此期间使用自己设计的数据库编写SQL语句真是得心应手,也因此找到了学习SQL的正确方法,即先学习数据库设计,再学习对这些表增删改查的SQL语句。

    本书使用微软SQL Server 2008搭建学习环境,以软件开发过程中的需求分析文档为基础设计学习数据库,然后使用自己设计的数据库来学习SQL语句。

    本书提供了生成学习环境的数据库表和插入记录的SQL语句,为你的学习准备好了数据。

    本书主要内容

     数据的结构化集合称为数据库。数据库模型可分为层次模型、网状模型和关系模型。关系模型是目前最普遍使用的一种数据模型,它采用人们所熟知的二维表格来描述现实世界中的实体以及各实体之间的各种联系,概念清晰、使用方便。在其被提出之后,就得到数据库开发商的积极支持,使其迅速成为继层次模型和网状模型之后一种崭新的数据库模型,如今在数据库技术领域占据了统治地位,市场上流行的数据库产品几乎都支持关系模型。本章通过一张表和一个简单的教学管理系统案例来讲解关系模型,以及如何利用关系模型来设计数据库。

     SQL的全称是结构化查询语言,是Structured Query Language的缩写。随着关系数据库理论的提出,美国国家标准协会(ANSI)首次定义了SQL标准,随后国际标准化组织(ISO)将SQL标准采纳为国际标准。SQL语言在不断发展的过程中经历了多次修改和完善。各大数据库厂商在遵循ANSI标准的同时,根据自己的产品特点对SQL进行再开发和扩展,于是就有了SQL Server的Transact-SQL(简称T-SQL)、Oracle的PL/SQL等语言。本书以T-SQL为基础进行SQL语言介绍,大部分SQL语言内容同样适用于其他数据库产品。本章讲述最基本的SQL内容,这些知识虽然基础简单,但是对学好本书的后续内容起着至关重要的作用。

     从本章开始将踏上对数据的操作之旅,这正是SQL的目的,也是学习SQL语句乐趣的开始。数据的查询,是SQL中使用最频繁的操作,也是最重要的知识之一。在SQL Server中,大量的组件和技术都是为了查询而存在,这正说明了查询的重要性。在本章的数据查询中会大量使用上一章中介绍的T-SQL语法、运算符等基础知识,这些基础知识还会贯穿在后续的章节中。

     第3章中讲述了基础查询,其涉及的都是在单个表上的查询。但是单表查询常常不能满足查询需求。在关系数据库设计时,出于规范化,需要将数据分散在多个表中。T-SQL因关系型数据库而生,因此在使用T-SQL进行查询时会经常涉及两表或多表中的数据,这就需要使用表的联接来实现多个表数据之间的联接查询。联接查询是关系型数据库的一个主要特点,同时也是区别于其他类型数据库管理系统的一个主要标志。本章将详细讲述多表联接的类型,UNION合并结果集,增强型分组函数CUBE、ROLLUP和GROUPING SETS的使用方法。

     如果说多表联接使查询语句变得复杂,那么子查询则使得查询变得更灵活、更有逻辑。所谓子查询,就是一个嵌套在SELECT、INSERT、UPDATE、DELETE语句或其他子查询中的查询。在很多情况下,查询并不是一蹴而就的,往往需要其他载体充当中间角色,而子查询正是充当着中间集这样一种角色。子查询是内部查询,返回的结果集供外部查询使用。子查询根据返回结果集中值的数量可以分为标量子查询、多值子查询和表子查询,也可以根据对外部查询的依赖性分为独立子查询和相关子查询。本章会按照这两种分类方式穿插介绍子查询。

     在设计表的时候,很多情况下都以方便数据存储为目的,导致有时候直接阅读这些表数据比较困难。前面几章介绍的SQL查询,数据的检索都是针对一张表或多张表进行的,而窗口计算则是在表内按用户自定义规则进行每组数据的检索和计算。在使用GROUP BY子句时,总是需要将筛选的所有数据进行分组操作,它的分组作用域是整张表,分组以后查询为每个组只返回一行,而使用基于窗口的操作则是对表中的一个窗口进行操作。行列转换是通过语句将行数据转换成列或列数据转换成行显示出来。

     在前面各章中详细地讲述了有关数据查询SELECT的知识,也在必要的地方略有涉及数据修改语句。在本章中,将会详细介绍数据操作语言(DML)中的INSERT、UPDATE和DELETE语句以及使用MERGE进行数据合并。

     数据完整性是用来保证数据库中数据一致性的一种物理机制,主要用于防止非法、不合理或赘余数据存在于数据库中。SQL Server提供了诸如数据类型、主键、外键、默认值约束、检查约束和规则等措施来实现这种机制。数据类型的实现机制不言自明,规则已经逐渐被淘汰,并且可以使用约束来替代它,因此本章主要介绍数据完整性的基础知识和实现数据完整性的各种约束。

     无论是数据库的开发人员、管理人员还是用户,他们都希望能够快速地从数据库中查询到期望的数据。如果表中数据量小,可能都能立即得到结果,但随着数据量的不断增大,查询所花费的时间也在急剧增加。使用合理的索引可以对查询进行优化,但是不合理的索引也可能会产生很大的副作用。

     在本章中将详细介绍另一种表表达式:视图(VIEW)。表表达式的基本目的是一样的,都是通过查询语句将满足条件的数据筛选出来作为中间结果集以作他用。相比前面介绍的两种表表达式,视图和表一样是数据库的一种对象,它实实在在存储在数据库中,只要不显式删除它们就可以重复使用。

     存储过程(Stored Procedure)是“过程”的,和其他编程语言的过程类似。存储过程是一段可执行的服务端程序,一个存储过程可以集合多条SQL语句,当它和服务器进行数据交互时,不管存储过程中包含有多少条SQL语句,服务器都会将它们作为一个事务进行处理并缓存它的执行计划。存储过程封装了语句,在编程角度考虑,它提高了复用性。和视图类似,它隐藏了数据库的复杂性,通过和视图类似的授权方式它还提高了数据库的安全性。同时,作为一种数据库对象,存储过程可以在需要时直接调用。本章主要介绍存储过程的创建、修改和注意事项,以及存储过程的特性。

     在第2章中介绍了一些内置的系统函数,如聚合函数AVG()和SUM()、字符串函数SUBSTRING()和LTRIM()等,这些函数的作用就是实现特定的功能,简化并封装频繁执行的逻辑操作。除了这些内置函数,SQL Server还允许创建用户自定义函数(User-Defined Functions,UDF)来扩展SQL语句的功能。

     触发器实现的是一种通过某些操作的触发来完成另一个操作过程的功能。例如,当删除一张表中的某些记录时同时希望删除另一张表中的某些相关记录,当然这可以通过外键引用来实现,但是对有些表没有必要定义外键,这时候就可以通过触发器来触发实现。触发器是被动触发执行的,它不像函数、存储过程一样可以被显式调用。本章将详细讲述常用的AFTER触发器及其工作原理,在介绍过程中会涉及简单的事务概念。

     多个用户对同一数据进行交互称为并发。如果不加以控制,并发可能引起很多问题。数据库提供了可以合理解决并发问题的方案。在本章中,从事务开始介绍,然后介绍并发带来的问题,最后详细介绍锁的机制和事务隔离级别。本章内容贯穿整个数据库系统,理解本章内容对数据库其他方面的学习有极大帮助,由于涉及较多理论,因此这些内容应当着重理解并通过实验进行验证。

    本书适用于

     数据库管理员

     软件开发人员

     企业IT运维人员

    学生评价

    韩立刚老师数据库开发视频教程:

    http://edu.51cto.com/course/course_id-904.html

    http://edu.51cto.com/course/course_id-926.html

    下面是51CTO学院学生听完韩老师“数据库设计与开发”课程后的评价。

    技术支持

    技术交流和资料索取请联系韩老师。

    韩老师QQ:458717185。

    韩立刚IT技术交流群:301678170。

    韩老师视频教学网站:http://www.91xueit.com。

    韩老师微信:hanligangdongqing,微信支付书费,韩老师签名寄书。

    韩老师微信公众号:han_91xueit。

    致谢

    河北师范大学软件学院采用“校企合作”的办学模式:在课程体系设计上与市场接轨;在教师的使用上,大量聘用来自企业一线的工程师;在教材及实验手册建设上,结合国内优秀教材的知识体系,大胆创新,开发了一系列理论与实践相结合的教材(本教材即是其中一本)。在学院新颖模式的培养下,百余名学生进入知名企业实习或已签订就业合同,得到了用人企业的广泛认可。这些改革及成果的取得,首先要感谢河北师范大学校长蒋春澜教授的大力支持和鼓励,同时还要感谢河北师范大学校党委对这一办学模式的肯定与关心。

    在此对河北师范大学数学与信息科学学院院长邓明立教授、软件学院副院长赵书良教授和李文斌副教授表示真诚的谢意,是他们为本书的写作提供了良好的环境,为本书内容的教学实践保驾护航,他们与编著者关于教学的沟通与交流为本书提供了丰富的案例和建议。感谢河北师范大学软件学院教学团队的每一位成员,感谢河北师范大学软件学院的每一位学生,是他们的友好、热情、帮助和关心促成了本书。

    最后,感谢我的家人在本书创作过程中给予我的支持和理解。

    韩立刚

    2016年12月

    第1章 关系数据库 1
    1.1 关系模型基本概念 1
    1.2 E-R模型到关系模型的转化 3
    1.3 数据库设计规范 6
    1.3.1 第一范式(1NF) 6
    1.3.2 第二范式(2NF) 7
    1.3.3 第三范式(3NF) 8
    第2章 Transact-SQL概述 10
    2.1 启动SQL Server Management Studio
    (SSMS) 10
    2.2 T-SQL语句的类型 12
    2.2.1 DDL语句 12
    2.2.2 DCL语句 13
    2.2.3 DML 14
    2.3 T-SQL语法要素 16
    2.3.1 SQL语句的批处理符号GO 16
    2.3.2 EXEC 17
    2.3.3 注释符 17
    2.3.4 标识符 18
    2.4 变量 19
    2.5 数据类型 21
    2.5.1 字符串类型 21
    2.5.2 Unicode字符串类型 23
    2.5.3 日期时间类型 23
    2.5.4 数值类型 23
    2.6 运算符 25
    2.6.1 算术运算符 25
    2.6.2 比较运算符 25
    2.6.3 逻辑运算符 25
    2.6.4 连接运算符 26
    2.7 常用函数 26
    2.7.1 聚合函数 27
    2.7.2 数值函数 28
    2.7.3 字符串函数 29
    2.7.4 日期时间函数 30
    2.7.5 数据类型转换函数 31
    2.7.6 控制NULL的常用函数 32
    2.8 流程控制语句 32
    2.8.1 条件判断语句IF…ELSE和CASE 33
    2.8.2 循环语句 35
    第3章 查询基础 36
    3.1 简单查询逻辑处理过程 36
    3.2 数据库对象的引用规则 39
    3.3 指定表的返回列来筛选列 40
    3.4 使用WHERE筛选行 41
    3.4.1 使用比较运算符过滤数据 41
    3.4.2 搜索范围内的值 41
    3.4.3 使用IN指定列表搜索条件 42
    3.4.4 使用LIKE关键字进行模糊匹配 42
    3.4.5 使用NULL比较搜索条件 43
    3.4.6 筛选时影响性能的注意事项 44
    3.5 格式化结果集 44
    3.5.1 在选择列表中使用常量、函数和
    表达式 44
    3.5.2 使用别名 45
    3.5.3 使用ORDER BY子句对结果排序 46
    3.5.4 使用TOP限制结果集 48
    3.5.5 使用DISTINCT消除重复行 50
    3.6 使用GROUP BY子句和聚集函数进行
    分组计算 51
    3.6.1 在查询中使用聚集函数 51
    3.6.2 GROUP BY使用基础 52
    3.6.3 使用HAVING子句筛选分组后
    的数据 53
    第4章 多表联接查询和数据汇总 55
    4.1 联接基础知识 55
    4.1.1 在FROM子句中联接 56
    4.1.2 在WHERE子句中联接 56
    4.2 交叉联接 57
    4.3 内联接 57
    4.4 外联接 59
    4.4.1 左外联接 59
    4.4.2 右外联接 60
    4.4.3 完全外部联接 60
    4.5 自联接 62
    4.5.1 使用同一列进行自联接 62
    4.5.2 使用不同列进行自联接 62
    4.6 联接查询的逻辑处理过程 64
    4.7 多表联接查询 64
    4.8 UNION合并结果集 64
    4.8.1 UNION和UNION ALL 65
    4.8.2 对合并结果集进行排序 66
    4.8.3 结果集的合并顺序 66
    4.9 汇总数据 67
    4.9.1 ROLLUP 67
    4.9.2 CUBE 70
    4.9.3 使用GROUPING SETS 70
    4.9.4 GROUPING查看汇总行并区分
    NULL 71
    第5章 子查询 73
    5.1 独立子查询 73
    5.1.1 独立标量子查询 74
    5.1.2 独立多值子查询 74
    5.2 相关子查询 75
    5.3 使用IN(NOT IN)和EXISTS(NOT
    EXISTS)谓词 76
    5.3.1 IN和NOT IN 77
    5.3.2 EXISTS和NOT EXISTS 77
    5.4 表表达式 81
    5.4.1 派生表 81
    5.4.2 公用表表达式(CTE) 84
    第6章 开窗函数和行列转换 89
    6.1 窗口和开窗函数 89
    6.2 排名窗口函数 90
    6.2.1 使用ROW_NUMBER()进行
    分区编号 91
    6.2.2 使用RANK()和DENSE_RANK()
    进行分区排名 94
    6.2.3 使用NTILE()进行数据分组 96
    6.3 聚合窗口函数 97
    6.4 行列转换 100
    6.4.1 行转列 100
    6.4.2 列转行 105
    第7章 数据修改 109
    7.1 插入数据 109
    7.1.1 使用INSERT和VALUES插入
    数据 109
    7.1.2 使用SELECT INTO插入数据 110
    7.1.3 使用INSERT和SELECT插入
    数据 111
    7.2 删除数据 112
    7.2.1 使用DELETE删除行 112
    7.2.2 使用TRUNCATE TABLE删除
    所有行 113
    7.3 更新数据 113
    7.3.1 使用SET和WHERE更新数据 113
    7.3.2 更新基于其他表的数据 113
    7.4 使用MERGE合并数据 114
    7.5 通过表表达式修改数据 118
    第8章 数据完整性 121
    8.1 数据完整性的类型和实现方式 121
    8.1.1 域完整性及实现方式 122
    8.1.2 实体完整性及实现方式 122
    8.1.3 参照完整性及实现方式 122
    8.2 实现实体完整性 124
    8.2.1 使用主键 124
    8.2.2 使用UNIQUE约束 127
    8.2.3 使用自增列 127
    8.3 实现域完整性 131
    8.3.1 CHECK约束 131
    8.3.2 DEFAULT约束 132
    8.3.3 NOT NULL定义 133
    8.4 参照完整性 134
    8.4.1 实现表间列的参照完整性 134
    8.4.2 实现表内列的参照完整性 137
    8.5 使用关系图实现参照完整性 138
    8.6 使约束失效 141
    8.7 使用图形界面实现数据完整性 141
    8.7.1 添加主键 141
    8.7.2 设置UNIQUE约束 142
    8.7.3 设置CHECK约束 142
    8.7.4 设置默认值约束 144
    8.7.5 设置外键 145
    8.7.6 禁用约束 147
    第9章 索引 148
    9.1 数据的存储方式 149
    9.1.1 页(Page) 149
    9.1.2 区(Extent) 152
    9.1.3 索引分配映射页(IAM页) 152
    9.1.4 估算表的大小 153
    9.2 B树(Balanced Tree) 154
    9.3 查看页内容的工具 156
    9.3.1 DBCC IND 156
    9.3.2 DBCC PAGE 158
    9.4 堆(Heaps) 160
    9.5 聚集索引 162
    9.5.1 约束与索引的关系 162
    9.5.2 唯一聚集索引的物理结构 163
    9.5.3 不唯一聚集索引的物理结构 167
    9.5.4 使用聚集索引查找数据的
    执行计划 168
    9.6 非聚集索引及其物理结构 169
    9.6.1 在堆中的非聚集索引 169
    9.6.2 在聚集表中的非聚集索引 172
    9.6.3 使用非聚集索引查找数据的
    执行计划 175
    9.7 修改数据对索引结构的影响 176
    9.7.1 页拆分和行移动现象 176
    9.7.2 插入行 178
    9.7.3 删除行 179
    9.7.4 更新行 180
    9.8 碎片和索引维护 180
    9.8.1 碎片 180
    9.8.2 维护索引 182
    9.9 复合索引 187
    9.10 包含列索引 188
    9.11 索引交叉 188
    9.12 筛选索引 189
    9.13 全文搜索 190
    9.13.1 创建和修改全文目录 191
    9.13.2 创建全文索引 191
    9.13.3 全文搜索的查询方法 192
    9.14 统计信息 194
    9.14.1 了解统计信息的作用 194
    9.14.2 查看和分析统计信息 195
    9.14.3 创建统计信息 198
    9.14.4 更新统计信息 198
    9.14.5 同步和异步统计信息更新 200
    9.15 基于索引设计的考虑 200
    第10章 视图 202
    10.1 视图简介 202
    10.2 使用标准视图 204
    10.2.1 创建标准视图 204
    10.2.2 通过视图更新数据 206
    10.2.3 修改和删除视图 208
    10.3 视图选项 209
    10.3.1 使用ENCRYPTION选项 209
    10.3.2 使用SCHEMABINDING选项 210
    10.3.3 使用CHECK OPTION选项 211
    10.4 使用索引视图 212
    10.4.1 创建索引视图 213
    10.4.2 索引视图的性能 213
    10.4.3 更新索引视图 214
    10.5 视图的优点 215
    第11章 存储过程 216
    11.1 存储过程的类型 216
    11.1.1 系统存储过程 217
    11.1.2 扩展存储过程 217
    11.1.3 用户自定义存储过程 217
    11.2 SQL存储过程 218
    11.2.1 创建无参数的存储过程 218
    11.2.2 修改和删除存储过程 220
    11.2.3 创建带参数的存储过程 221
    11.2.4 获取存储过程的执行结果 223
    11.3 存储过程示例分析 224
    11.4 存储过程的解析特点 225
    11.5 存储过程的编译、重编译 226
    11.6 使用存储过程的优缺点 227
    第12章 用户自定义函数 229
    12.1 UDF简介 229
    12.2 标量UDF 230
    12.3 内联表值函数 232
    12.4 多语句表值函数 233
    12.5 UDF的修改和删除 235
    12.6 UDF的调用分析 235
    第13章 触发器 239
    13.1 触发器的概念和分类 239
    13.2 DML触发器 240
    13.2.1 两张特殊的临时表 240
    13.2.2 insert触发器 241
    13.2.3 delete触发器 242
    13.2.4 update触发器 244
    13.2.5 禁用和启用触发器 244
    13.2.6 检测基于列修改的触发器 244
    13.2.7 FIRST触发器和LAST触发器 245
    13.3 使用触发器实现审核跟踪 246
    13.4 DML触发器的工作原理和事务控制 246
    13.4.1 触发器的工作原理 247
    13.4.2 DML触发器的事务控制 248
    13.5 DDL触发器 249
    13.5.1 创建数据库级别的DDL触发器 249
    13.5.2 创建服务器级别的DDL触发器 250
    第14章 事务和锁 251
    14.1 事务 251
    14.1.1 显式事务处理模式 252
    14.1.2 自动提交事务模式 253
    14.1.3 隐式事务处理模式 253
    14.1.4 嵌套事务的控制 254
    14.1.5 事务、事务日志和检查点 255
    14.2 并发访问引起的问题 257
    14.3 锁 260
    14.3.1 锁的粒度和锁升级 260
    14.3.2 锁的类型和查看锁 261
    14.3.3 锁的兼容性 265
    14.4 设置事务隔离级别 266
    14.4.1 SQL标准定义的4种事务隔离
    级别 266
    14.4.2 行版本的事务隔离级别 271
    14.5 隔离级别、锁和并发问题的关系 274
    14.6 死锁 275





最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册