第1章 数据库系统与SQL语言概述 1
1.1数据库系统与数据模型 2
1.1.1基本术语 2
1.1.2数据库技术的发展 3
1.1.3数据模型 5
1.2数据库系统的体系结构 6
1.2.1数据库系统的三级模式结构 6
1.2.2数据库管理系统(DBMS) 8
1.2.3数据库系统的工作流程 9
1.3关系数据库的简单介绍 10
1.3.1关系数据库的基本特性 10
1.3.2关系数据库的设计规范 11
1.4SQL语言概述 12
1.4.1SQL语言的发展 12
1.4.2SQL语言的功能 13
1.4.3SQL语言的执行形式 13
1.4.4SQL语句结构 14
1.4.5SQL的环境 15
1.4.6SQLDBMS的客户机/服务器模型 17
1.4.7SQL语言的扩展 18
1.5小结 19
第2章 Transact-SQL与SQLServer2005 20
2.1SQLServer2005及其简单应用 21
2.1.1SQLServer2005的版本 21
2.1.2SQLServerManagementStudio 22
2.1.3使用ManagementStudio创建数据库 23
2.1.4使用ManagementStudio创建、查看、编辑表 25
2.1.5使用ManagementStudio编辑、运行T-SQL语言 27
2.2Transact-SQL语言 28
2.2.1Transact-SQL概述 28
2.2.2Transact-SQL的标识符 29
2.2.3对象命名规则 29
2.2.4Transact-SQL的主要组成 30
2.2.5Transact-SQL的其他一些常用命令 32
2.3Transact-SQL在SQLServer中的执行 38
2.3.1解析Transact-SQL语句 38
2.3.2编译Transact-SQL语句 39
2.3.3执行Transact-SQL语句 39
2.4小结 40
第3章 数据库与表的操作 41
3.1创建、修改和删除数据库 42
3.1.1SQLServer数据库的组成 42
3.1.2创建数据库——CREATEDATABASE 43
3.1.3修改数据库——ALTERDATABASE 47
3.1.4查看数据库信息——sp_belpdb、spspaceused 49
3.1.5删除数据库——DROPDATABASE 52
3.2SQLServer中的表 52
3.2.1表的结构及设计 52
3.2.2Transact-SQL对表的要求 53
3.2.3表的类型 53
3.3SQLServer2005中的数据类型 54
3.3.1数字类型 55
3.3.2时间和日期类型 57
3.3.3字符数据类型 59
3.3.4二进制数据类型 60
3.3.5其他数据类型 60
3.3.6用户自定义数据类型 62
3.3.7数据类型同义词 63
3.4创建表(CREATETABLE) 64
3.4.1实例表设计 64
3.4.2创建基本表——CREATETABLE 65
3.4.3指定值非空——NOTNULL 67
3.4.4指定列的默认值——DEFAULT 68
3.5编辑表结构(ALTERTABLE) 70
3.5.1添加列或约束——ADD 70
3.5.2修改列的定义——ALTERCOLUMN 71
3.5.3删除列——DROPCOLUMN 72
3.6重命名、删除表 73
3.6.1改变表的名字——sp_rename 73
3.6.2删除基本表——DROPTABLE 74
3.7小结 74
第4章 基本的查询 75
4.1SELECT语句的结构与执行 76
4.1.1SELECT语句的语法结构 76
4.1.2SELECT各子句的顺序及功能 76
4.1.3SELECT语句各子句的执行 77
4.2最简单的查询 78
4.2.1向实例表中添加数据 78
4.2.2查询表中列的数据——FROM子句 79
4.2.3去除结果的重复信息——DISTINCT 80
4.2.4查询所有列——“*” 82
4.2.5进行无数据源检索 83
4.2.6返回查询的部分数据——TOP 83
4.3带有搜索条件的查询 85
4.3.1简单的选择查询——WHERE 85
4.3.2使用比较表达式 86
4.3.3使用基本的逻辑表达式——NOT、AND、OR 87
4.3.4空值(NULL)的判断——IS[NOT]NULL 93
4.3.5限定数据范围——BETWEEN 94
4.3.6限制检索数据的范围——IN 95
4.3.7模糊查询——LIKE 96
4.4排序查询结果 102
4.4.1基本排序——ORDERBY 102
4.4.2对多列进行排序 104
4.5小结 106
第5章 查询中表达式与函数的使用 107
5.1SQLServer中的运算符 108
5.1.1算术运算符 108
5.1.2位运算符 108
5.1.3比较运算符 109
5.1.4逻辑运算符 109
5.1.5字符串连接符 110
5.1.6赋值运算符 110
5.1.7运算符的优先级 110
5.2SELECT子句中表达式的使用 110
5.2.1使用连接符连接列——“+” 111
5.2.2操作查询的列名——“=”、“AS” 112
5.2.3对重命名列的操作 114
5.2.4算术表达式的使用 116
5.3数学函数的使用 117
5.3.1三角函数 117
5.3.2计算函数 118
5.3.3近似函数 119
5.4字符处理函数的使用 119
5.4.1SQLServer2005中的字符处理函数 120
5.4.2字符的转换处理函数 120
5.4.3字符串的提取函数 123
5.4.4其他字符串处理函数 127
5.5日期、时间处理函数的使用 129
5.5.1SQLServer2005中的日期处理函数 129
5.5.2获取当前时间——GETDATE、GETUTCDATE、CURRENTTIMESTAMP 130
5.5.3增加、减少时间——DATEADD 130
5.5.4获取时间间隔——DATEDIFF 131
5.5.5获取时间整数值——DAY、MONTH、YEAR、DATEPART 132
5.5.6获取时间的字符串——DATENAME 133
5.5.7常用的时间计算 134
5.6类型转换函数的使用 136
5.6.1类型转换——CAST 136
5.6.2类型转换——CONVERT 138
5.7小结 139
第6章 系统函数、聚合函数与分组查询 140
6.1系统函数的使用 141
6.1.1信息查询相关系统函数 141
6.1.2判断、分类系统函数 142
6.1.3统计系统函数 145
6.2聚合函数的使用 147
6.2.1聚合函数的种类 147
6.2.2计数函数——COUNT 147
6.2.3求和函数——SUM 149
6.2.4均值函数——AVG 149
6.2.5最大值/最小值函数——MAX/MIN 151
6.2.6统计函数——STDEV、STDEVP、VAR、VARP 152
6.2.7聚合函数的重值处理——ALL、DISTINCT 153
6.2.8聚合函数的执行机理 153
6.3分组查询 154
6.3.1简单分组——GROUPBY 154
6.3.2多列分组 155
6.3.3分组查询中NULL值的处理 156
6.3.4汇总数据运算符——CUBE、ROLLUP 157
6.3.5区分不同的NULL值——GROUPING 159
6.3.6筛选分组结果——HAVING 160
6.3.7多级分类汇总——COMPUTE 162
6.3.8对分组聚合结果进行聚合分析 164
6.4小结 166
第7章 数据连接与多表查询 167
7.1多表连接的基本概念与实现 168
7.1.1连接的概念 168
7.1.2连接的类型与实现 169
7.1.3创建实例表ReaderInfo 169
7.2简单多表查询的实现 171
7.2.1使用FROM子句实现多表查询 171
7.2.2使用WHERE子句指定连接条件 172
7.2.3使用别名作为表名的简写 173
7.2.4自连接表进行查询 174
7.3使用JOIN关键字实现表的连接 176
7.3.1基本连接语法 176
7.2.2内部连接——INNERJOIN 177
7.3.3外部连接——OUTERJOIN 178
7.3.4交叉连接——CROSSJOIN 183
7.3.5连接与空值 185
7.3.6表的连接与聚合分析 186
7.4集合运算 188
7.4.1关系的集合运算 188
7.4.2集合并运算——UNION 188
7.4.3多表的UNION操作 191
7.4.4UNION与JOIN的区别 192
7.4.5集合差/集合交运算——EXCEPT/INTERSECT 193
7.4.6集合运算在Transact-SQL语句中的使用原则 196
7.5小结 197
第8章 数据库数据操作 198
8.1向表中添加数据——INSERT 199
8.1.1INSERT命令的基本语法 199
8.1.2整行插入数据 200
8.1.3INSERT.操作中NULL值的处理 201
8.1.4INSERT操作中默认值的处理 202
8.1.5INSERT操作中唯一值的处理 203
8.1.6使用INSERT*SELECT插入数据 204
8.2修改和更新表中的数据——UPDATE 206
8.2.1UPDATE命令的基本语法 206
8.2.2使用UPDATE更新数据行 207
8.2.3使用FROM和WHERE子句根据多表连接更新数据 208
8.2.4大值数据类型字段值的更新 210
8.2.5使用OPENROWSET和BULK来操作大型数据对象 212
8.3删除表中的数据——DELETE 214
8.3.1DELETE命令的基本语法 214
8.3.2使用DELETE删除行 215
8.3.3使用TRUNCATETABLE删除表中的所有数据 216
8.4BLOB(text、ntext和image)数据处理 217
8.4.1写入BLOB数据——WRITETEXT 217
8.4.2更新BLOB数据——UPDATETEXT 219
8.4.3TEXTSIZE选项和@@TEXTSIZE函数 221
8.5OUTPUT子句 221
8.5.1基本语法 222
8.5.2OUTPUT子句的使用 222
8.6表中数据的复制和导入、导出操作 226
8.6.1复制表中数据——SELECT*INTO 226
8.6.2导入、导出数据——BCP工具 228
8.7小结 229
第9章 子查询及FORXML子句的使用 230
9.1子查询基础 231
9.1.1相关子查询与非相关子查询 231
9.1.2子查询的组成 233
9.1.3子查询的使用方式及限制 233
9.2比较运算符引入返回单值的子查询 234
9.2.1比较运算符引入子查询 234
9.2.2在子查询中使用聚合函数返回单值 236
9.3IN或修改的比较运算符引入返回多值的子查询 237
9.3.1使用[NOT]IN引入子查询 237
9.3.2使用修改的比较运算符引入返回多值的子查询 240
9.4EXISTS引入的存在测试子查询 244
9.4.1使用EXISTS的子查询 244
9.4.2EXISTS子查询的使用 245
9.4.3使用EXISTS子查询检查表中的重复行 247
9.5子查询的其他应用 247
9.5.1在子查询中使用TOP关键字 248
9.5.2在SELECT子句中使用子查询 249
9.5.3在HAVING子句中使用子查询 250
9.5.4在数据操作语言(DML)中使用子查询 252
9.6FORXML子句 253
9.6.1FORXML子句的基本语法 253
9.6.2FORXMLRAW模式及使用 254
9.6.3FORXMLAUTO模式及使用 256
9.6.4FORXMLEXPLICIT模式及使用 257
9.6.5FORXMLPATH模式及使用 260
9.6.6使用TYPE指令返回xml数据类型 263
9.6.7在数据操作语言(DML)中使用FORXML子句 263
9.7小结 264
第10章 表的约束、索引与视图 265
10.1表键及其使用 266
10.1.1表约束的种类 266
10.1.2约束的创建 266
10.1.3主键约束——PRIMARYKEY 267
10.1.4外键约束——FOREIGNKEY 269
10.1.5外键与级联引用完整性约束 273
10.1.6标识符列——IDENTITY属性 276
10.1.7查看、更改标识值——DBCCCHECKIDENT 278
10.2表的约束 279
10.2.1唯一性约束——UNIQUE 279
10.2.2校验约束——CHECK 281
10.2.3约束的删除、修改和禁用 282
10.3索引及其操作 285
10.3.1索引的基本知识 285
10.3.2创建索引——CREATEINDEX 287
10.3.3非聚集索引的创建和使用——NONCLUSTERED 288
10.3.4聚集索引的创建和使用——CLUSTERED 291
10.3.5聚集索引和非聚集索引的使用 292
10.3.6查看、修改和删除索引 293
10.3.7索引的使用准则 296
10.4视图及其应用 296
10.4.1视图的基本知识 297
10.4.2创建视图——CREATEVIEW 298
10.4.3查询视图的定义和相关信息 300
10.4.4修改、更新和删除视图 301
10.4.5通过视图修改表中记录 303
10.4.6索引视图及其使用 306
10.5小结 308
第11章 存储过程与用户自定义函数 309
11.1理解存储过程 310
11.1.1存储过程的基本概念 310
11.1.2存储过程的优点 310
11.1.3存储过程的种类 311
11.2程序流控制语句 311
11.2.1SQLServer中的程序流控制语句 311
11.2.2IF*ELSE条件选择结构 312
11.2.3BEGIN*END语句块 313
11.2.4CASE结构 313
11.2.5WHILE循环结构 315
11.2.6WAITFOR等待语句 316
11.3存储过程的创建和使用 317
11.3.1系统存储过程 317
11.3.2创建存储过程——CREATEPROCEDURE 317
11.3.3存储过程的创建实例 319
11.3.4执行存储过程——EXECUTE 321
11.3.5查看、修改和删除存储过程 323
11.4用户自定义函数的创建和使用 325
11.4.1创建标量型自定义函数 326
11.4.2创建内联表值自定义函数 327
11.4.3创建多语句表值自定义函数 328
11.4.4调用用户自定义函数 330
11.4.5修改、查询和删除自定义函数 331
11.5小结 333
第12章 触发器与错误处理 334
12.1触发器的基本概念 335
12.1.1触发器简介 335
12.1.2触发器的类型 335
12.1.3触发器的作用及使用 336
12.1.4触发器的执行环境 337
12.2创建和使用DML触发器 338
12.2.1AFTERDML触发器的创建语法 338
12.2.2AFTERDML触发器的创建实例 339
12.2.3测试对指定列的UPDATE操作 342
12.2.4INSTEADOFDML触发器的创建和使用 345
12.2.5嵌套触发器 348
12.2.6递归触发器 351
12.2.7查询DML触发器的相关信息 354
12.3创建和使用DDL触发器 356
12.3.1DDL触发器的创建语法 356
12.3.2DDL触发器的创建实例 357
12.3.3查询DDL触发器的相关信息 359
12.4触发器的管理 360
12.4.1使用系统存储过程查询触发器的相关信息 360
12.4.2修改触发器——ALTERTRIGGER 362
12.4.3禁用/启用触发器——DISABLE/ENABLETRIGGER 362
12.4.4设置触发器的激发顺序——sp_settriggerorder 363
12.4.5删除触发器——DROPTRIGGER 365
12.5错误的获取与处理 366
12.5.1查询错误消息——sys.messages 366
12.5.2使用用户自定义错误消息——sp_addmessage/sp_dropmessage 366
12.5.3激发错误消息——RAISERROR 368
12.5.4获取错误消息——TRY*CATCH/@@ERROR 369
12.6小结 371
第13章 安全性管理——主体、权限、安全对象 372
13.1SQLServer2005安全模式 373
13.1.1主体(Principals) 373
13.1.2安全对象(Securables) 378
13.1.3权限(Permissions) 379
13.2创建与管理Windows级别的主体 380
13.2.1创建Windows认证登录用户(组)——CREATELOGIN 380
13.2.2查看Windows认证登录用户 381
13.2.3修改Windows认证登录用户——ALTERLOGIN 382
13.2.4删除Windows认证登录用户——DROPLOGIN 383
13.3创建与管理SQLServer级别的主体 383
13.3.1创建SQLServer认证登录用户——CREATELOGIN 383
13.3.2修改SQLServer认证登录用户——ALTERLOGIN 385
13.3.3查询服务器角色信息 386
13.3.4管理服务器角色信息 387
13.4创建与管理数据库级别的主体 389
13.4.1创建数据库用户——CREATEUSER 389
13.4.2修改、删除数据库用户——ALTER/DROPUSER 391
13.4.3管理数据库用户 392
13.4.4管理固定数据库角色 394
13.4.5管理用户自定义数据库角色 396
13.4.6管理应用程序角色 397
13.5安全对象与权限 400
13.5.1SQLServer的内置权限 400
13.5.2服务器范围的安全对象及其权限管理 401
13.5.3数据库范围的安全对象及其权限管理 404
13.5.4架构范围的安全对象及其权限管理 405
13.5.5对象类安全对象及其权限管理 411
13.6主体、安全对象和权限的管理 413
13.6.1评估当前用户对安全对象的有效权限——Has_perms_by_name 414
13.6.2查询当前用户对安全对象的有效权限——fn_my_permissions 415
13.6.3创建凭据——CREATECREDENTIAL 416
13.7小结 417
第14章 事务控制和并发处理 418
14.1事务控制的基本概念 419
14.1.1事务控制的必要性 419
14.1.2事务的ACID特性及实现 419
14.1.3事务的状态 420
14.1.4Transact-SQL中事务的执行 421
14.2SQLServer中事务的实现 422
14.2.1启动事务——BEGINTRANSACTION 422
14.2.3提交事务——COMMITTRANSACTION 424
14.2.3回滚事务——ROLLBACKTRANSACTION 426
14.2.4设置事务的保存点——SAVETRANSACTION 428
14.3并发控制及其实现 430
14.3.1并发访问的问题 430
14.3.2SQLServer中的锁 432
14.3.3锁的使用 433
14.3.4显示数据库中活跃的事务和锁信息——DBCCOPENTRAN 436
14.3.5事务隔离级别 438
14.3.6设置事务隔离级别——SETTRANSATION 439
14.3.7不同事务隔离级别实现并发控制实例 440
14.3.8事务阻塞及其解决方法 448
14.3.9死锁及其预防 451
14.4小结 454
第15章 游标与全文检索 455
15.1游标的基本概念 456
15.1.1游标的概念 456
15.1.2游标的实现及应用过程 457
15.2基本游标的创建和使用 458
15.2.1创建游标——DECLARECURSOR 458
15.2.2打开游标——OPEN 459
15.2.3检索游标数据——FETCH 459
15.2.4关闭/删除游标——CLOSE/DEALLOCATE 460
15.2.5遍历游标结果集——@@FETCH_STATUS 462
15.2.6使用游标修改、删除数据 463
15.3Transact-SQL扩展游标与游标的管理 465
15.3.1Transact-SQL扩展游标语法 465
15.3.2使用游标变量 467
15.3.3事务中游标的使用 469
15.3.4游标的管理 470
15.4全文检索基础 471
15.4.1全文索引和全文目录 471
15.4.2创建全文目录——CREATEFULLTEXTCATALOG 472
15.4.3创建全文索引——CREATEFULLTEXTINDEX 473
15.5使用全文谓词和全文函数进行全文检索 474
15.5.1使用CONTAINS谓词进行全文检索 474
15.5.2使用FREETEXT谓词进行全文检索 477
15.5.3使用全文函数——CONTAINSTABLE、FREETEXTTABLE 478
15.6小结 479
第16章 服务器和数据库的配置与管理 480
16.1管理服务器配置选项 481
16.1.1查询服务器配置选项 481
16.1.2更改服务器配置选项 483
16.2管理数据库配置选项 484
16.2.1查询数据库信息 484
16.2.2自动选项及其设置 485
16.2.3ANSISQL选项及其设置 487
16.2.4外部数据源对数据库的访问选项 488
16.2.5游标选项及其设置 489
16.2.6数据库恢复选项和磁盘I/O错误检查 490
16.2.7控制数据库的状态和属性 491
16.2.8数据库磁盘空间管理 493
16.3数据库的维护 497
16.3.1检查磁盘空间分配结构的一致性——DBCCCHECKALLOC 497
16.3.2检查数据库对象的结构和逻辑完整性——DBCCCHECKDB 498
16.3.3检查文件组分配和结构完整性——DBCCCHECKFILEGROUP 500
16.3.4检查页和结构的完整性——DBCCCHECKTABLE 501
16.3.5检查约束的完整性——DBCCCHECKCONSTRAINTS 502
16.4数据库的备份与恢复 504
16.4.1数据库备份与恢复的基本概念 504
16.4.2备份操作相关的Transact-SQL语句 506
16.4.3完整备份——BACKUPDATABASE 507
16.4.4创建逻辑备份设备——sp_addumpdevice 510
16.4.5事务日志备份——BACKUPLOG 511
16.4.6差异备份——DIFFERENTIAL 513
16.4.7文件备份 514
16.4.8部分备份——READ_WRITE_FILEGROUPS 516
16.4.9查询备份集的元数据 517
16.4.10数据库还原——RESTOREDATABASE 519
16.5信息架构视图 524
16.5.1信息架构视图简介 524
16.5.2TABLES信息架构视图 525
16.5.3VIEWS信息架构视图 526
16.5.4COLUMNS信息架构视图 527
16.5.5ROUTINES信息架构视图 529
16.6小结 530
附录A标准的SQL语句 531
附录BSQLServer的全局变量 533
附录CSET语句及功能 540
第2章 Transact-SQL与SQL 20
实例1使用PRINT命令显示信息 33
实例2使用READTEXT命令读取指定的字节数 34
实例3使用SETSTATISTICSIO命令 35
实例4使用SETSTATISTICSTIME命令 36
实例5使用SETROWCOUNT命令控制查询记录数量 37
第3章 数据库与表的操作 41
实例1使用CREATEDATABASE创建数据库 45
实例2向数据库中添加由两个文件组成的文件组 48
实例3修改数据库文件 48
实例4查看Library数据库的信息 49
实例5查看服务器中的所有数据库的信息 50
实例6查看数据库表的磁盘空间信息 50
实例7查看数据库的磁盘空间信息 51
实例8使用货币数据类型 55
实例9使用SETDATEFORMAT更改日期的输入格式 58
实例10使用sp_addtype自定义数据类型 62
实例11创建简单的BookInfo表 66
实例12创建BookInfo表,指定数据的长度和精度 67
实例13创建BookInfo表,指定数据的长度和精度 68
实例14创建BookInfo表,指定默认值 69
实例15修改BookInfo表,添加新列 70
实例16修改Booklnfo表中列的定义 71
实例17删除BookInfo表中的某列 72
实例18重命名数据库表和其中的列 73
第4章 基本的查询 75
实例1查询单列数据 79
实例2查询多列数据 80
实例3查询BookInfo表中所有的图书名称(去除重复值) 81
实例4DISTINCT对NULL值的处理 81
实例5查询BookInfo表中所有列的记录 82
实例6使用SELECT语句查看常量 83
实例7使用SELECT语句查看全局变量 83
实例8查询BookInfo表的前6行记录 84
实例9查询BookInfo表的bookname、bookid、price的前60%条记录 84
实例10查询BookInfo表中publish列科学出版社的记录 85
实例11查询BookInfo表中价格不超过50元的图书记录 86
实例12使用比较运算符,比较字符串 86
实例13不等于运算符“<>”的使用 87
实例14使用AND运算符进行多条件查询 88
实例15使用OR运算符进行多条件查询 89
实例16使用NOT运算符进行多条件查询 90
实例17NOT运算符对NULL值的处理 91
实例18逻辑运算符的优先级 92
实例19使用IS[NOT]NULL判别式处理NULL值 93
实例20使用BETWEEN限定数据范围查询 94
实例21使用BETWEEN运算符限定时间范围查询 95
实例22使用IN限定检索数据的范围 96
实例23使用“%”通配符进行模糊查询 97
实例24使用“%”通配符实现头、尾匹配 97
实例25使用“%”通配符实现排除查询 98
实例26使用“_”通配符实现模糊查询 98
实例27使用“_”通配符实现固定数目字符查询 99
实例28使用“[]”通配符实现模糊查询 100
实例29使用“[^]”通配符实现模糊查询 101
实例30基本排序操作 102
实例31降序排序操作 103
实例32使用查询列之外的列,进行排序操作 104
实例33对多列进行排序操作 104
实例34使用序号对多列进行排序操作 105
第5章 查询中表达式与函数的使用 107
实例1使用“+”连接符连接列 111
实例2NULL字段的连接 112
实例3使用ANSI规则的标准方法重命名列 112
实例4使用“=”为列重命名 113
实例5使用AS为列重命名 114
实例6使用别名对列进行排序 114
实例7在查询中使用算术运算 116
实例8三角函数的使用 118
实例9计算函数的使用 118
实例10近似函数的使用 119
实例11使用ASCII函数获取ASCII码值 121
实例12使用CHAR函数将ASCII值转换为字符 121
实例13使用UPPER函数将字符串的英文字符转换为大写 122
实例14使用STR函数转换数字数据后实现多列连接 123
实例15使用SUBSTRING函数提取字符串 124
实例16使用LTRIM和RTRIM函数去除字符串中的前、后向空格 124
实例17使用CHARINDEX函数查找指定串的位置 125
实例18使用PATINDEX函数实现模糊查询 126
实例19使用REPLACE函数替换指定的串 126
实例20使用LEN函数获取指定串的字符数 127
实例21使用REVERSE函数反向输出字符串 128
实例22使用SOUNDEX和DIFFERENCE函数判断字符串的相似性 128
实例23获取当前时间 130
实例24使用DATEADD函数增加、减少时间 131
实例25使用DATEDIFF函数获取时间间隔 132
实例26提取指定时间的年、月、日的整数值 132
实例27使用DATEPART函数获取当前时间星期几、小时、分钟的整数值 133
实例28使用DATENAME函数获取日期指定部分的字符串 133
实例29获取当前月的第一天的日期 134
实例30判断本周的星期一的日期 135
实例31判断上个月的最后一天日期 135
实例32使用CAST函数转换数据类型 137
实例33使用CAST函数转换日期时间类型为字符串 137
实例34使用CONVERT函数转换日期时间类型 139
第6章 系统函数、聚合函数与分组查询 140
实例1查询当前服务器和数据库的相关信息 141
实例2使用APPNAME判断当前会话的应用程序 142
实例3判断列中的数据是否为日期、数值类型 143
实例4使用ISNULL函数替换表中的空值 144
实例5判断列名、列的定义长度和表中字段数据的字节数 145
实例6使用统计系统函数统计数据库服务的相关信息 146
实例7使用COUNT函数获取表中记录的数目 148
实例8使用COUNT函数实现对满足某种条件的记录计数 148
实例9使用SUM函数进行求和计算 149
实例t0使用AVG函数进行求均值计算 150
实例11AVG函数用作子查询 150
实例12MAX和MIN函数的使用 151
实例13获取拥有极值的记录 151
实例14获取记录的标准偏差 152
实例15聚合函数的重值处理 153
实例16简单的分组 154
实例17根据多列进行分组 156
实例18GROUPBY子句对NULL值的处理 157
实例19使用CUBE运算符进行数据汇总 157
实例20使用ROLLUP运算符进行数据汇总 158
实例21使用GROUPING函数判断NULL值 159
实例22使用HAVING子句筛选分组结果 161
实例23使用不带BY子句的COMPUTE子句汇总数据 162
实例24使用带有BY子句的COMPUTE子句汇总数据 163
实例25使用全局临时表实现对分组聚合结果进行聚合分析 165
实例26使用视图实现对分组聚合结果进行聚合分析 165
第7章 数据连接与多表查询 167
实例1典型的二表连接演示 168
实例2使用FROM子句直接实现二表连接 171
实例3使用WHERE子句指定连接表的连接条件 172
实例4使用表别名简化表的连接 173
实例5表的自连接的使用 174
实例6分步实现实例5 175
实例7采用子查询的方法实现实例5 175
实例8使用INNERJOIN实现同等连接 177
实例9使用INNERJOIN实现自连接 178
实例10使用LEFTOUTERJOIN实现左外部连接表 179
实例11使用RIGHTOUTERJOIN实现右外部连接表 181
实例12使用FULLOUTERJOIN实现全外部连接表 183
实例13使用CROSSJOIN实现交叉连接表 184
实例14表连接中,NULL值的匹配 185
实例15外部连接NULL值的判断 186
实例16连接表并对其数据进行聚合分析 186
实例17使用UNION运算符执行集合并的运算 189
实例18使用UNION运算符连接常量和变量结果集 190
实例19典型的二表记录的UNION运算 192
实例20使用EXCEPT运算符实现集合差运算 194
实例21使用INTERSECT运算符实现集合交运算 195
实例22EXCEPT和INTERSECT运算符的优先级 195
实例23使用ORDERBY子句对集合运算结果排序 196
第8章 数据库数据操作 198
实例1使用INSERT命令向Books表中添加记录 200
实例2INSERT插入带有空值的记录 201
实例3INSERT插入采用默认值的记录 202
实例4带有唯一值(UNIQUE)的记录的插入 203
实例5使用INSERT...SELECT向表中添加数据 204
实例6使用INSERT...SELECT实现查找表 205
实例7使用UPDATE更新表中的一行数据 207
实例8使用UPDATE更新表中的多行数据 208
实例9在UPDATE语句中使用FROM子句进行更新操作 209
实例10大值数据类型的操作 210
实例11使用OPENROWSET和BULK实现图像文件的操作 213
实例12使用DELETE删除表中的行 215
实例13在DELETE语句中使用FROM子句进行删除操作 215
实例14使用TRUNCATETABLE语句删除表中的所有数据 216
实例15使用WRITETEXT语句写入BLOB数据 218
实例16使用UPDATETEXT语句更新BLOB数据 220
实例17使用SETTEXTSIZE命令设置显示BLOB的字节数 221
实例18将OUTPUT子句用于INSERT语句 223
实例19将OUTPUT子句用于DELETE语句 224
实例20将OUTPUT子句用于UPDATE语句 225
实例21使用OUTPUT子句返回表达式 226
实例22用SELECT...INTO语句实现表的复制 227
第9章 子查询及FOR XML子句的使用 230
实例1非相关子查询的使用实例 231
实例2相关子查询的使用实例 232
实例3由比较运算符引入子查询 235
实例4由比较运算符引入带有聚合函数的子查询 236
实例5比较运算符两边均使用聚合函数的子查询 236
实例6使用IN引入子查询实现表的连接 238
实例7使用IN引入子查询实现集合交操作 239
实例8使用NOTIN引入子查询实现集合差操作 240
实例9使用>ANY引入返回多值的子查询 241
实例10<>ANY、<>ALL与NOTIN的使用 243
实例11使用EXISTS引入存在测试子查询 245
实例12EXISTS子查询中使用NULL仍然返回结果集 246
实例13使用EXISTS引入子查询实现集合交操作 246
实例14使用EXISTS进行唯一性测试 247
实例15在子查询中使用TOP关键字 248
实例16在SELECT子句中使用子查询 249
实例17在HAVING子句中使用相关子查询 250
实例18在UPDATE语句中使用子查询 252
实例19使用FORXMLRAW模式返回XML结果 254
实例20使用FORXMLAUTO模式返回XML结果 256
实例21使用FORXMLEXPLICIT模式返回XML结果 258
实例22使用FORXMLPATH模式返回XML结果 260
实例23使用TYPE指令返回XML数据 263
实例24在INSERT语句的子查询中使用FORXML子句 263
第10章 表的约束、索引与视图 265
实例1为列创建PRIMARYKEY约束 267
实例2为多列创建联合PRIMARYKEY约束 269
实例3FOREIGNKEY约束的创建与使用 270
实例4组合外键约束的使用 271
实例5级联引用完整性约束的使用 275
实例6使用IDENTITY属性指定标识列 277
实例7使用DBCCCHECKIDENT语句查看、更改标识值 278
实例8UNIQUE约束的创建与使用 280
实例9CHECK约束的创建与使用 281
实例10为已有表添加PRIMARYKEY 282
实例11删除表中的约束 283
实例12禁用表中的CHECK约束 283
实例13创建唯一非聚集索引 288
实例14强制使用非聚集索引 290
实例15创建唯一聚集索引 291
实例16查看ReaderInfo3表中的索引信息 293
实例17重命名ReaderInfo3表中的索引INDreaderid 294
实例18使用ALTERINDEX语句禁用索引 295
实例19使用CREATEVIEW语句创建标准视图 299
实例20从sys.sql_modules目录视图查询视图的定义 300
实例21查询当前数据库的所有视图及包含的列 300
实例22使用sphelp查询视图的特征 301
实例23使用ALTERVIEW修改视图 302
实例24通过视图向表中添加数据 303
实例25通过视图修改表中的数据 304
实例26通过视图删除表中的数据 305
实例27索引视图的创建和使用 307
第11章 存储过程与用户自定义函数 309
实例1IF...ELSE语句的使用 312
实例2简单CASE表达式的使用 313
实例3搜索CASE表达式的使用 314
实例4WHILE循环结构的使用 315
实例5创建不带任何参数的存储过程 319
实例6创建带有输入参数的存储过程 319
实例7创建带有输出参数的存储过程 320
实例8使用EXECUTE执行存储过程 321
实例9查询数据库中所有存储过程的信息 323
实例10使用ALTERPROCEDURE命令修改存储过程 324
实例11创建标量型自定义函数 327
实例12创建内联表值自定义函数 328
实例13创建多语句表值自定义函数 329
实例14返回标量值的用户自定义函数的调用 330
实例15查询当前数据库中所有用户自定义函数的相关信息 332
第12章 触发器与错误处理 334
实例1创建AFTERDML触发器 339
实例2创建AFTERDML触发器保证数据的完整性 341
实例3在触发器中使用UPDATE()测试特定列的更新 343
实例4在触发器中使用COLUMNS_UPDATED测试特定列的更新 344
实例5为视图创建INSTEADOF触发器 345
实例6创建和使用嵌套DML触发器 348
实例7创建和使用递归DML触发器 352
实例8从系统目录视图sys.triggers查询DML触发器的信息 354
实例9从系统目录视图sys.sql_modules查询DML触发器的定义文本 355
实例10创建数据库作用域的DDL触发器 357
实例11创建服务器作用域的DDL触发器 358
实例12查询Library数据库中的所有数据库作用域的DDL触发器 359
实例13查询所有服务器作用域的DDL触发器的信息 360
实例14使用sphelp查询触发器的基本信息 361
实例15使用sp_helptext查看触发器的定义文本 361
实例16使用sp_depends查询指定触发器引用的表 362
实例17使用sp_settriggerorder设定触发器的激发顺序 364
实例18从系统目录视图sys.messages中查询错误消息 366
实例19使用sp_addmessage创建自定义错误消息 367
实例20使用TRY.CATCH结构获取错误信息 370
实例21使用@@ERROR检测一个特定错误 371
第13章 安全性管理——主体、权限、安全对象 372
实例1使用CREATELOGIN创建Windows认证登录用户 381
实例2查询当前服务器的Windows认证登录用户(组)信息 382
实例3使用CREATELOGIN创建SQLServer认证登录用户 384
实例4使用ALTERLOGIN修改SQLServer用户 385
实例5在目录视图sys.server_pnncipals中,查询固定服务器角色 386
实例6将登录名添加到固定服务器角色 388
实例7查询服务器角色中的成员信息 388
实例8使用CREATEUSER语句创建数据库用户 390
实例9查询登录用户及其对应的数据库用户 393
实例10使用sp_change_users_login链接数据库用户与登录用户 394
实例11使用sp_helpdbfixedrole查询数据库角色的名称及其描述信息 395
实例12使用CREATEROLE创建自定义数据库角色 396
实例13向角色授予权限并添加角色成员 397
实例14创建应用程序角色并授予权限 398
实例15使用sp_setapprole激活应用程序角色 399
实例16使用sys.fnbuiltin_permissions查询内置权限 400
实例17架构的创建和使用 407
实例18查询数据库中的架构及其拥有者 410
实例19数据库对象权限管理 412
实例20使用Has_perms_by_name评估当前用户对安全对象的有效权限 414
实例21使用fn_my_permissions查询用户对安全对象的所有操作权限 415
第14章 事务控制和并发处理 418
实例1使用SETIMPLICIT_TRANSACTIONS开启隐式事务 423
实例2嵌套事务的提交与@@TRANCOUNT值 425
实例3嵌套事务的回滚与@@TRANCOUNT值 427
实例4在事务中使用保存点 429
实例5使用表级锁进行并发控制 434
实例6查询数据库中活跃的事务和锁的信息 437
实例7READUNCOMMITTED隔离级别下的并发访问 441
实例8READCOMMITTED隔离级别下的并发访问 443
实例9REPEATABLEREAD隔离级别下的并发访问 445
实例10SERIALIZABLE隔离级别下的并发访问 446
实例11阻塞的产生 448
实例12死锁的产生 451
第15章 游标与全文检索 455
实例1游标的基本概念 456
实例2基本游标的创建及其使用 461
实例3遍历游标的结果集 462
实例4使用游标更新数据 464
实例5使用游标变量作为存储过程的输出参数 468
实例6事务中游标的使用 469
实例7使用sp_cursorlist查询当前服务器游标的属性 470
实例8创建全文索引 473
实例9使用CONTAINS谓词进行全文检索 475
实例10使用CONTAINSTABLE函数进行全文检索 478
第16章 服务器和数据库的配置与管理 480
实例1使用sp_configure查询服务器的配置选项 481
实例2使用sp_configure更改服务器的配置选项 483
实例3使用sys.databases查询数据库配置信息 485
实例4设置数据库的自动选项 486
实例5设置数据库的ANSISQL选项 488
实例6查询数据库的恢复模式 490
实例7查询数据库的I/O错误检查模式 491
实例8查询数据库的工作状态 492
实例9查询用户对数据库的访问属性 493
实例10查询所有数据库中使用事务日志空间的统计信息 494
实例11使用DBCCSHRINKDATABASE语句收缩数据库 495
实例12使用DBCCCHECKALLOC检查数据库空间的一致性 498
实例13使用DBCCCHECKDB检查数据库对象的分配、结构和逻辑完整性 499
实例14使用DBCCCHECKFILEGROUP检查文件组的完整性 500
实例15使用DBCCCHECKTABLE检查页和结构的完整性 502
实例16使用DBCCCHECKCONSTRAINTS检查表约束的完整性 503
实例17使用BACKUPDATABASE完整备份数据库 508
实例18通过逻辑备份设备完整备份数据库 510
实例19完整备份数据库和日志 513
实例20对数据库TestDB实现完整差异备份 514
实例21进行数据库文件备份 515
实例22对数据库进行部分备份 516
实例23查询备份集的元数据信息 518
实例24在完整恢复模式下完整备份和还原数据库 521
实例25从TABLES视图中查询当前用户可访问的Library数据库表信息 526
实例26从VIEWS视图中查询当前用户可访问的Library数据库视图信息 527
实例27从COLUMNS视图中查询Library.dbo.BookInfo表中的列信息 528
实例28从ROUTINES视图中查询Library数据库中存储过程和函数信息 530