第1篇 SQL基础篇 2
第0章 数据库的运行环境及权限设置 2
0.1 SQL Server数据库的SQL代码运行环境 2
0.2 SQL Server数据库中的数据权限 3
0.2.1 服务器角色 3
0.2.2 数据库角色 3
0.2.3 应用程序角色 4
0.3 Oracle数据库的SQL代码运行环境 4
0.4 Oracle数据库中的数据权限 4
0.4.1 对象权限 4
0.4.2 系统权限 5
0.4.3 角色权限 5
0.5 MySQL数据库的SQL代码运行环境 6
0.6 MySQL数据库中的数据权限 7
0.6.1 服务器检查是否允许用户连接 7
0.6.2 检查登录用户的操作 7
第1章 数据库与SQL概述 9
1.1 数据库概述 9
1.1.1 数据库基本概念 9
1.1.2 数据管理技术简史 11
1.2 数据模型 12
1.2.1 实体描述 13
1.2.2 实体间联系及联系的种类 13
1.2.3 概念模型的表示方法 13
1.2.4 常用的3种数据模型 14
1.3 关系数据库 15
1.3.1 关系数据库的基本概念 15
1.3.2 关系数据库的设计 16
1.3.3 设计关系数据库的过程 16
1.3.4 数据库规范化 16
1.3.5 范式枚举 17
1.4 SQL概述 19
1.4.1 SQL简史 19
1.4.2 SQL的特点 20
1.4.3 SQL的约定和要求 20
1.5 小结 21
第2章 创建、修改和删除数据库 22
2.1 SQL代码运行环境 22
2.2 创建数据库的语法结构 23
2.3 利用create database语句创建数据库 24
2.3.1 创建默认数据库 24
2.3.2 创建指定数据库文件位置的数据库 25
2.3.3 创建多数据文件、多日志文件的数据库 26
2.3.4 创建多个文件组的数据库 27
2.4 修改数据库 28
2.4.1 查看数据库的语法结构 28
2.4.2 利用sp_helpdb函数查看数据库 29
2.4.3 重命名数据库的语法结构 30
2.4.4 利用sp_renamedb函数重命名数据库 30
2.4.5 增加数据库的数据文件 31
2.4.6 增加数据库的日志文件 32
2.4.7 修改数据库文件 33
2.4.8 删除数据库文件 34
2.5 删除数据库 35
2.5.1 利用SQL代码删除数据库 35
2.5.2 利用IF和SQL语句动态删除数据库 36
2.6 小结 37
第3章 创建和操作数据库表 38
3.1 数据库表概述 38
3.2 创建数据库表 38
3.2.1 创建数据库表的语法结构 38
3.2.2 创建普通数据库表 41
3.3 创建临时数据库表 42
3.3.1 创建局部临时表 42
3.3.2 创建全局临时表 43
3.4 创建含有列约束的数据库表 44
3.4.1 创建含有不能为空字段的数据库表 44
3.4.2 创建含有主键、唯一键字段的数据库表 45
3.4.3 创建主键、外键关联的数据库表 46
3.4.4 创建含有check约束字段的数据库表 47
3.5 创建含有默认、计算字段的数据库表 48
3.5.1 创建含有默认值字段的数据库表 48
3.5.2 创建含有计算字段的数据库表 49
3.6 创建含有自动编号、排序字段的数据库表 50
3.6.1 创建含有自动编号字段的数据库表 50
3.6.2 创建含有排序字段的数据库表 50
3.6.3 动态判断数据库表是否存在 51
3.7 修改数据库表 52
3.7.1 查看数据库表的信息 52
3.7.2 重命名数据库表 54
3.7.3 增加数据库表的新字段 55
3.7.4 修改数据库表的字段 55
3.7.5 删除数据库表的字段 56
3.8 删除数据库表 58
3.9 db_business数据库的设计与实现 60
3.9.1 创建db_business数据库表的E-R图 60
3.9.2 创建db_business数据库 61
3.9.3 创建仓库表并插入数据 61
3.9.4 创建职工表并插入数据 63
3.9.5 创建供应商表并插入数据 63
3.9.6 创建订购单表并插入数据 64
3.10 小结 65
第2篇 SQL数据查询和处理篇 67
第4章 SQL数据查询 67
4.1 SQL数据查询概述 67
4.2 投影查询 68
4.2.1 查询单列和多列 68
4.2.2 查询所有列 69
4.2.3 消除重复列 69
4.3 列的计算 70
4.3.1 显示职工的姓名、工资及奖金信息 70
4.3.2 显示职工的姓名、工资、代扣税、奖金、应发工资信息 71
4.3.3 显示职工的姓名、工资和职工评语信息 72
4.3.4 连接列值 73
4.4 where条件查询 74
4.4.1 等值查询 75
4.4.2 不匹配查询 76
4.4.3 and运算符查询 78
4.4.4 or运算符查询 79
4.4.5 not运算符查询 80
4.4.6 运算符的优先级 80
4.5 between...and区间查询 81
4.6 in运算符查询 82
4.7 空值查询 83
4.8 like模糊查询 84
4.8.1 %通配符在like模糊查询中的应用 85
4.8.2 _通配符在like模糊查询中的应用 86
4.8.3 []通配符在like模糊查询中的应用 86
4.8.4 [^]通配符在like模糊查询中的应用 87
4.8.5 在多个字段中进行like模糊查询 88
4.9 排序查询 88
4.9.1 升序排序查询 88
4.9.2 降序排序查询 89
4.9.3 多列排序查询 90
4.9.4 随机排序 91
4.9.5 显示部分记录的排序 91
4.9.6 计算字段排序 92
4.9.7 按用户的需求对数据动态排序 93
4.10 小结 93
第5章 SQL数据类型 94
5.1 SQL数据类型概述 94
5.2 数字类型 94
5.2.1 精确数字 95
5.2.2 近似数字 95
5.3 字符串类型 97
5.4 二进制字符串 97
5.4.1 分割字符串类型数据 98
5.4.2 转换字符串的大小写 98
5.5 日期和时间类型 99
5.5.1 转换日期和时间类型数据格式 100
5.5.2 按时间查询数据 101
5.6 XML数据类型 102
5.7 用户定义数据类型 102
5.8 其他数据类型 103
5.9 小结 103
第6章 SQL高级查询 104
6.1 聚合函数查询 104
6.1.1 count聚合函数的应用 104
6.1.2 sum聚合函数的应用 106
6.1.3 max和min聚合函数的应用 107
6.1.4 avg聚合函数的应用 108
6.1.5 利用聚合函数产生虚拟字段 109
6.1.6 聚合函数虚拟字段的排序 112
6.1.7 聚合函数在where条件中的应用 114
6.2 分组查询 115
6.2.1 group by简单分组查询 116
6.2.2 带有虚拟字段的分组查询 117
6.2.3 带有where条件的分组查询 117
6.2.4 带有having条件的分组查询 118
6.2.5 多列组合分组查询 119
6.2.6 all关键字在分组查询中的应用 121
6.2.7 cube关键字在分组查询中的应用 122
6.2.8 rollup关键字在分组查询中的应用 123
6.2.9 分组查询的排序 125
6.2.10 compute by查询的应用 125
6.3 小结 127
第7章 SQL嵌套子查询 128
7.1 SQL嵌套子查询概述 128
7.2 单行嵌套子查询 128
7.2.1 等值单行嵌套子查询 128
7.2.2 不匹配单行嵌套子查询 129
7.2.3 区间单行嵌套子查询 130
7.2.4 多表单行嵌套子查询 132
7.3 多行嵌套子查询 133
7.3.1 in运算符在嵌套子查询中的运用 133
7.3.2 exists运算符在嵌套子查询中的运用 136
7.3.3 any运算符在嵌套子查询中的运用 137
7.3.4 all运算符在嵌套子查询中的运用 139
7.4 产生虚拟字段的嵌套子查询 140
7.4.1 单表产生虚拟字段的嵌套子查询 141
7.4.2 多表产生虚拟字段的嵌套子查询 142
7.5 产生虚拟表的嵌套子查询 143
7.6 group by分组在嵌套子查询中的应用 144
7.6.1 利用group by产生虚拟表嵌套子查询 144
7.6.2 group by在where条件中的应用 145
7.7 内外层嵌套子查询 146
7.8 小结 148
第8章 SQL多表连接查询 149
8.1 SQL多表连接查询概述 149
8.2 笛卡儿积 149
8.3 简单的多表连接查询 151
8.3.1 带有比较运算符的多表连接查询 151
8.3.2 带有模糊运算的多表连接查询 152
8.3.3 带有排序的多表连接查询 153
8.4 复杂的多表连接查询 154
8.4.1 带有虚拟计算字段的多表连接查询 154
8.4.2 带有复杂条件的多表连接查询 155
8.5 带有保存功能的多表连接查询 156
8.6 超连接查询 159
8.6.1 内连接查询 159
8.6.2 左连接查询 160
8.6.3 右连接查询 162
8.6.4 全连接查询 163
8.6.5 超连接查询的综合应用 164
8.7 集合的并、交、差运算查询 165
8.7.1 集合的并运算 165
8.7.2 集合的交运算 168
8.7.3 集合的差运算 168
8.8 小结 170
第9章 SQL数据处理 171
9.1 SQL数据处理概述 171
9.2 插入数据 171
9.3 插入单行数据记录 172
9.3.1 通过指定所有列插入记录 172
9.3.2 通过指定部分列插入记录 175
9.3.3 通过默认值插入记录 176
9.4 插入多行数据记录 177
9.4.1 利用values插入多行数据记录 177
9.4.2 利用union all插入多行数据记录 178
9.4.3 利用insert select插入多行数据记录 179
9.5 更新数据 181
9.5.1 更新一行中的一列数据信息 181
9.5.2 更新多行中的一列数据信息 182
9.5.3 利用嵌套查询更新数据信息 184
9.5.4 更新多列中的数据信息 185
9.5.5 更新所有行中的数据信息 187
9.6 删除数据 188
9.6.1 删除单行数据信息 188
9.6.2 删除多行数据信息 189
9.6.3 利用嵌套查询删除数据信息 190
9.6.4 删除表中的所有记录 191
9.7 小结 192
第10章 SQL流程控制 193
10.1 SQL流程控制概述 193
10.2 变量 193
10.2.1 局部变量的声明 193
10.2.2 局部变量的赋值 194
10.2.3 局部变量的声明、赋值与输出 194
10.2.4 利用局部变量动态查询数据表中的数据信息 196
10.2.5 全部变量概述 196
10.2.6 全局变量的应用 197
10.3 注释符和常用运算符 198
10.4 程序流程控制 199
10.5 顺序结构与分支结构 199
10.6 if...else语句 199
10.6.1 if...else语句的应用 200
10.6.2 if...else语句在数据表查询中的应用 200
10.7 if...else if...else语句 202
10.7.1 if...else if...else语句的应用 202
10.7.2 if...else if...else语句在数据表中的应用 203
10.8 case语句 205
10.8.1 case语句的应用 206
10.8.2 case语句在数据表查询中的应用 207
10.9 循环结构的语法结构 207
10.10 while语句的应用 208
10.11 跳转语句 209
10.11.1 break语句 209
10.11.2 continue语句 210
10.11.3 goto语句 212
10.11.4 return语句 212
10.12 小结 214
第3篇 SQL常用对象技术篇 216
第11章 视图管理 216
11.1 视图概述 216
11.1.1 视图的优点 216
11.1.2 视图的缺点 216
11.2 创建视图 217
11.2.1 单表视图 217
11.2.2 多表视图 219
11.2.3 带有聚合函数的视图 220
11.2.4 基于视图的视图 221
11.2.5 创建带有分组功能的视图 225
11.2.6 创建与数据表字段不同的视图 227
11.2.7 创建加密视图 228
11.3 修改视图 228
11.4 删除视图 229
11.4.1 利用SQL代码删除视图 230
11.4.2 带有判断条件的删除视图 230
11.5 视图数据的查询 231
11.5.1 查询视图中的数据与查询数据表中的数据对比 231
11.5.2 排序视图中的数据信息 232
11.5.3 分组查询视图中的数据信息 233
11.6 通过视图添加、更新和删除数据 234
11.6.1 通过视图添加数据 235
11.6.2 通过视图更新数据 236
11.6.3 通过视图删除数据 236
11.7 小结 237
第12章 存储过程 238
12.1 存储过程概述 238
12.1.1 系统存储过程 238
12.1.2 自定义存储过程 238
12.1.3 存储过程的优点 239
12.2 创建并执行存储过程 239
12.2.1 不带参数的存储过程 240
12.2.2 数据查询功能的不带参数的存储过程 241
12.2.3 带有输入参数的存储过程 243
12.2.4 带有输入参数的数据查询功能的存储过程 245
12.2.5 带有输入和输出参数的存储过程 246
12.2.6 带有登录判断功能的存储过程 247
12.2.7 带有判断条件的插入功能的存储过程 248
12.2.8 带有判断条件的删除功能的存储过程 250
12.2.9 带有判断条件的更新功能的存储过程 251
12.2.10 创建加密存储过程 252
12.3 修改存储过程 253
12.3.1 查看存储过程的属性和功能代码信息 253
12.3.2 修改存储过程的功能代码 255
12.3.3 重命名存储过程 256
12.4 删除存储过程 256
12.4.1 删除存储过程 257
12.4.2 带有判断条件的删除存储过程 257
12.5 存储过程的自动执行和监控 258
12.5.1 存储过程的自动执行 259
12.5.2 监控存储过程 259
12.6 小结 260
第13章 函数 261
13.1 SQL函数概述 261
13.2 聚合函数 261
13.2.1 统计标准偏差stdev()函数的语法格式 261
13.2.2 统计标准偏差函数stdev()的应用 262
13.2.3 总体标准偏差stdevp() 262
13.2.4 统计方差var() 263
13.2.5 总体变异方差varp() 263
13.2.6 其他统计函数的应用 263
13.3 算术函数 265
13.3.1 三角函数与反三角函数的应用 266
13.3.2 符号函数的应用 267
13.3.3 幂函数的应用 268
13.3.4 取近似值函数的应用 269
13.3.5 随机函数的应用 270
13.3.6 利用随机函数与取近似值函数实现彩票30选7 271
13.4 字符串函数 272
13.4.1 字符转换函数的语法结构 273
13.4.2 字符转换函数的应用 273
13.4.3 循环输出26个小写英文字母及其ASCII码 274
13.4.4 字符长度函数及去空格函数 275
13.4.5 取子串函数 276
13.4.6 字符串操作函数的分类 278
13.4.7 字符串操作函数的应用 279
13.4.8 利用字符串操作函数绘制菱形美元图案 280
13.5 数据类型转换函数 281
13.6 日期时间函数 281
13.6.1 显示当前日期 282
13.6.2 显示时间 283
13.6.3 显示星期 284
13.6.4 日期时间函数在查询语句中的应用 284
13.7 自定义函数 285
13.7.1 创建并调用函数的语法结构 285
13.7.2 标量值函数的创建与调用 285
13.7.3 表值函数的创建与调用 288
13.7.4 查看函数的属性和功能代码信息 289
13.7.5 修改函数的功能代码 291
13.7.6 重命名函数 293
13.7.7 删除自定义函数 294
13.8 小结 295
第14章 游标 296
14.1 游标概述 296
14.1.1 游标的优点 296
14.1.2 实现游标的方法 296
14.2 游标的类型 297
14.3 游标的基本构成 298
14.3.1 声明游标 298
14.3.2 打开游标 300
14.3.3 读取游标中的数据 300
14.3.4 游标的关闭和释放 301
14.4 游标的基本操作 301
14.4.1 游标的声明、打开、读取和关闭 301
14.4.2 利用变量输出游标中的字段值 302
14.4.3 利用游标修改数据表中的数据记录 303
14.4.4 利用游标删除数据表中的数据记录 303
14.4.5 利用游标判断记录是否存在 304
14.4.6 利用游标逐条显示数据表中的数据记录 304
14.4.7 在存储过程中使用游标 305
14.5 游标的管理 306
14.5.1 sp_cursor_list()系统存储过程的语法格式 307
14.5.2 使用sp_cursor_list()系统存储过程管理游标 308
14.5.3 sp_describe_cursor()系统存储过程 309
14.5.4 使用sp_describe_cursor()系统存储过程管理游标 310
14.5.5 sp_describe_cursor_columns()系统存储过程的语法格式 310
14.5.6 使用sp_describe_cursor_columns()系统存储过程管理游标 312
14.5.7 sp_describe_cursor_tables()系统存储过程的语法格式 313
14.5.8 使用sp_describe_cursor_tables()系统存储过程管理游标 314
14.6 小结 315
第15章 触发器 316
15.1 触发器概述 316
15.1.1 触发器的作用 316
15.1.2 触发器的分类 317
15.2 创建与执行事后触发器 318
15.3 创建与执行替代触发器 320
15.4 查看触发器的属性和功能代码信息 323
15.5 修改触发器的功能代码 325
15.6 重命名触发器 326
15.7 删除触发器 327
15.7.1 删除无判断条件的触发器 327
15.7.2 删除带有判断条件的触发器 328
15.8 禁用与启用触发器 328
15.9 DDL触发器 329
15.10 创建与执行DDL触发器 330
15.10.1 保护数据表不被修改和删除的DDL触发器 330
15.10.2 保护数据库不能被删除的DDL触发器 331
15.10.3 记录数据库修改状态的DDL触发器 332
15.11 修改和删除DDL触发器 334
15.12 触发器的使用 335
15.12.1 删除功能触发器 336
15.12.2 插入功能触发器 337
15.12.3 更新功能触发器 338
15.12.4 嵌套触发器 339
15.13 小结 340
第4篇 SQL高级性能篇 342
第16章 SQL事务处理 342
16.1 SQL事务概述 342
16.1.1 事务的作用 342
16.1.2 事务的属性 342
16.1.3 数据一致性问题 343
16.2 锁机制 344
16.2.1 锁的粒度 344
16.2.2 锁的类型 344
16.3 事务的隔离级别 345
16.4 事务的控制 345
16.4.1 启动事务 346
16.4.2 结束事务 346
16.4.3 利用API函数控制事务 346
16.5 事务的错误处理 346
16.5.1 事务的设置及提交 346
16.5.2 回滚事务 347
16.6 事务保存点机制 349
16.6.1 创建事务保存点的语法格式 349
16.6.2 事务保存点的应用 349
16.7 死锁 352
16.7.1 避免与降低死锁的方法 352
16.7.2 事务中锁的应用 352
16.7.3 SQL中的死锁 353
16.8 调试事务 354
16.8.1 利用dbcc opentran查看事务信息 354
16.8.2 利用sp_who查看活动进程信息 356
16.8.3 利用dbcc inputbuffer获取进程中的SQL语句 358
16.8.4 利用kill终止进程 359
16.9 孤立事务 360
16.9.1 孤立事务的产生 360
16.9.2 利用if条件语句解决孤立事务 361
16.10 事务设计原则和注意事项 361
16.11 小结 362
第17章 SQL安全性控制 363
17.1 SQL安全性概述 363
17.1.1 服务器认证 363
17.1.2 数据库认证 363
17.1.3 设置服务器身份验证模式 364
17.2 角色 365
17.2.1 服务器角色 365
17.2.2 数据库角色 366
17.2.3 应用程序角色 367
17.3 登录账号的管理 367
17.3.1 登录账号的管理的语法格式 367
17.3.2 登录账号管理的应用 367
17.4 数据库用户的管理 370
17.4.1 数据库用户管理的语法格式 370
17.4.2 数据库用户管理的应用 370
17.5 服务器角色 372
17.6 数据库角色 373
17.7 应用程序角色 375
17.8 权限的管理 377
17.9 小结 379
第18章 SQL高级特性 380
18.1 SQL规则 380
18.1.1 创建规则 380
18.1.2 创建规则绑定 382
18.1.3 解除规则绑定 384
18.1.4 删除规则 385
18.2 索引概述 386
18.2.1 索引的优点 386
18.2.2 索引的缺点 387
18.2.3 索引的分类 387
18.3 创建索引 387
18.3.1 创建普通索引 388
18.3.2 创建唯一索引和簇索引 389
18.4 修改索引 389
18.4.1 重命名和查看索引 390
18.4.2 维护索引 390
18.4.3 重构索引 391
18.5 删除索引 392
18.6 约束完整性 393
18.6.1 约束完整性的分类 393
18.6.2 约束完整性的实现方法 394
18.7 SQL查询优化 394
18.7.1 避免使用or、not和distinct运算符 394
18.7.2 简化连接条件 396
18.8 小结 397
第19章 数据库的维护 398
19.1 压缩数据库 398
19.1.1 压缩数据库的语法格式 398
19.1.2 压缩数据库的应用 399
19.1.3 压缩数据库的指定数据文件或日志文件 400
19.2 备份数据库 401
19.2.1 备份和定时备份数据库 402
19.2.2 备份数据库的日志文件 402
19.2.3 备份数据库的文件和文件组 403
19.2.4 检查备份集 404
19.3 恢复数据库 404
19.4 数据库的分离和附加 405
19.4.1 利用sp_detach_db分离数据库 406
19.4.2 利用sp_attach_db附加数据库 406
19.5 小结 407
第20章 动态SQL 408
20.1 动态SQL概述 408
20.1.1 嵌入式SQL 408
20.1.2 动态SQL与静态SQL的区别 409
20.2 ODBC和OLE DB 409
20.2.1 开放式数据库连接ODBC 409
20.2.2 数据库对象链接和嵌入OLE DB 409
20.3 ADO.NET接口 410
20.4 C#调用SQL语句创建各种数据对象 411
20.4.1 C#调用SQL语句创建数据库 411
20.4.2 C#调用SQL语句创建数据库表 414
20.5 C#调用SQL语句处理数据表中的数据 417
20.5.1 C#调用SQL语句插入数据记录 417
20.5.2 C#调用SQL语句更新数据记录 420
20.5.3 C#调用SQL语句删除数据记录 425
20.6 C#调用SQL语句查询数据库中的数据信息 427
20.6.1 C#调用SQL语句显示不同数据表中的数据信息 427
20.6.2 C#调用SQL语句动态查询多表信息 429
20.6.3 C#调用SQL语句统计职工工资信息 430
20.6.4 C#调用SQL语句排序视图中的数据信息 431
20.7 C#中存储过程和触发器的应用 435
20.7.1 C#调用存储过程显示视图中的数据信息 435
20.7.2 利用触发器实现同时删除仓库备份表和职工备份表中的数据信息 437
20.8 ASP.NET与SQL 440
20.8.1 ASP.NET调用SQL语句显示数据库连接信息 440
20.8.2 ASP.NET调用SQL自定义函数实现工资评语 442
20.9 小结 445
第21章 SQL的未来 446
21.1 SQL展望 446
21.2 OLAP和商业智能 446
21.2.1 报表的创建及美化 447
21.2.2 动态上传和下载文件 452
21.2.3 发送电子邮件 456
21.2.4 备份数据库 457
21.3 SQL的LINQ 459
21.4 面向对象的数据库 462
21.5 小结 462