图书介绍

精通SQL 结构化查询语言详解pdf电子书版本下载

精通SQL 结构化查询语言详解
  • 李俊民编著 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115180414
  • 出版时间:2008
  • 标注页数:473页
  • 文件大小:130MB
  • 文件页数:500页
  • 主题词:

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快] 温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页 直链下载[便捷但速度慢]   [在线试读本书]   [在线获取解压码]

下载说明

精通SQL 结构化查询语言详解PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如 BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1篇 SQL入门篇 2

第1章 SQL语言的概述 2

1.1 认识SQL语言 2

1.1.1 什么是SQL语言 2

1.1.2 SQL的历史与发展 2

1.1.3 SQL的功能和优点 3

1.2 认识数据库 4

1.2.1 什么是数据库 4

1.2.2 数据库系统的结构 4

1.2.3 数据库系统的工作流程 5

1.2.4 常见的SQL数据库管理系统 6

1.3 数据模型 8

1.3.1 关系数据库模型 8

1.3.2 数据模型的构成 9

1.3.3 常见的数据模型 9

1.4 关系型数据库 10

1.4.1 关系型数据库的定义 11

1.4.2 关系型数据库与表 11

1.4.3 主键与外键 11

1.4.4 字段约束 12

1.4.5 数据的完整性 13

1.4.6 关系数据库设计原则 14

1.5 SQL开发环境 14

1.5.1 SQL环境介绍 14

1.5.2 SQL的层次结构 15

1.5.3 SQL环境中的对象 16

1.5.4 SQL环境中的程序系统 17

1.6 SQL语句基础 17

1.6.1 SQL常量 17

1.6.2 SQL表达式 18

1.6.3 SQL数据类型 19

1.6.4 注释符 21

1.6.5 批处理 21

1.6.6 SQL语句的执行 22

1.7 SQL语法知识 22

1.7.1 SQL语法结构 22

1.7.2 常用的SQL语句 23

1.8 小结 24

第2章 设计数据库 25

2.1 设计数据库基础 25

2.1.1 数据库设计定义 25

2.1.2 设计数据库的意义 25

2.1.3 进行数据库设计的方法 26

2.2 数据实体和联系 26

2.2.1 实体、属性与联系 26

2.2.2 一对一联系 27

2.2.3 一对多联系 27

2.2.4 多对多联系 27

2.3 规范化准则 28

2.3.1 范式 28

2.3.2 第一范式 28

2.3.3 第二范式 29

2.3.4 第三范式 30

2.3.5 第四范式 32

2.4 小结 32

第2篇 数据库管理篇 34

第3章 数据库的相关操作 34

3.1 创建数据库 34

3.1.1 SQL标准中创建数据库的语法 34

3.1.2 使用SQL语句创建数据库 34

3.2 删除数据库 36

3.2.1 SQL标准中删除数据库的语法 36

3.2.2 使用SQL语句删除数据库 36

3.3 修改数据库 37

3.3.1 修改数据库语法 37

3.3.2 使用SQL语句修改数据库 38

3.4 管理数据库 39

3.4.1 扩充与压缩数据库 39

3.4.2 导入与导出数据 40

3.4.3 数据库的备份与恢复 43

3.4.4 使用sp_helpdb查看数据库信息 45

3.5 小结 46

第4章 数据表的相关操作 47

4.1 SQL中的数据表 47

4.1.1 数据表的结构 47

4.1.2 数据表的种类 48

4.2 创建数据表 48

4.2.1 创建数据表的语句结构 49

4.2.2 创建基本表 49

4.2.3 非空约束 50

4.2.4 DEFAULT指定缺省值 50

4.3 修改数据表 51

4.3.1 修改数据表的语句结构 52

4.3.2 给数据表增添新列 53

4.3.3 修改数据表中的列 54

4.3.4 删除数据表中的列 54

4.4 数据表的删除 55

4.4.1 删除数据表的语句结构 55

4.4.2 使用SQL语句删除数据表 55

4.5 数据表的重命名 55

4.5.1 重命名数据表的语句 55

4.5.2 使用SQL语句重命名数据表 56

4.6 小结 56

第5章 索引与视图 57

5.1 索引的基础知识 57

5.1.1 索引的概念 57

5.1.2 索引的类型 57

5.1.3 索引的结构 58

5.2 创建索引 58

5.2.1 创建索引的语句结构 59

5.2.2 创建非簇索引 59

5.2.3 创建簇索引 60

5.2.4 创建惟一索引 61

5.2.5 创建复合索引 62

5.3 删除索引 64

5.3.1 删除索引的语句结构 64

5.3.2 使用SQL语句删除索引 65

5.4 视图的基础知识 65

5.4.1 视图概述 65

5.4.2 视图的优点与缺点 65

5.5 视图的基本操作 66

5.5.1 创建视图的基本语句结构 66

5.5.2 使用SQL语句创建视图 67

5.5.3 修改视图的语句结构 69

5.5.4 重命名视图的名称 70

5.5.5 使用SQL语句修改视图 70

5.5.6 删除视图的语句结构 71

5.5.7 使用SQL语句删除视图 72

5.6 视图的应用 72

5.6.1 利用视图简化表的复杂连接 72

5.6.2 利用视图简化复杂查询 73

5.7 小结 74

第3篇 SQL查询篇 76

第6章 简单的SELECT语句查询 76

6.1 查询的基本结构 76

6.1.1 了解SELECT语句 76

6.1.2 SELECT语句的语法格式 76

6.1.3 SELECT语句的执行步骤 77

6.2 简单的查询语句 77

6.2.1 查询表中指定的字段 78

6.2.2 查询所有的字段 78

6.2.3 使用DISTINCT去除重复信息 79

6.2.4 使用别名 81

6.3 排序与分组 81

6.3.1 升序排序与降序排序 82

6.3.2 多列字段排序 84

6.3.3 使用GROUP BY子句对查询结果进行分组 86

6.3.4 HAVING子句的应用 88

6.4 条件查询 89

6.4.1 WHERE单条件语句查询 89

6.4.2 运算符查询 90

6.4.3 BETWEEN运算符范围筛选 92

6.4.4 使用TOP子句 93

6.4.5 NULL的判断 94

6.5 模糊查询 95

6.5.1 使用LIKE运算符进行查询 95

6.5.2 使用“_”通配符进行查询 97

6.5.3 使用“%”通配符进行查询 98

6.5.4 使用“[]”通配符进行查询 101

6.5.5 使用“[^]”通配符进行查询 102

6.6 小结 102

第7章 运算符与表达式相关查询 103

7.1 逻辑运算符 103

7.1.1 逻辑与运算符 103

7.1.2 逻辑或运算符 105

7.1.3 逻辑运算符的组合使用 106

7.2 IN运算符 107

7.2.1 IN运算符的使用 108

7.2.2 NOT IN运算符的使用 108

7.3 NOT运算符与BETWEEN运算符 109

7.3.1 NOT运算符的使用 109

7.3.2 NOT运算符与BETWEEN运算符的组合应用 111

7.4 数学运算符 111

7.4.1 数学运算符的种类 111

7.4.2 数学运算符的应用 112

7.5 集合查询运算符 114

7.5.1 UNION运算符 114

7.5.2 INTERSECT运算符 117

7.6 运算符的组合应用 118

7.6.1 逻辑运算符与IN运算符的组合应用 118

7.6.2 逻辑运算符与NOT运算符的组合应用 118

7.6.3 逻辑运算符与数学运算符的组合应用 119

7.6.4 逻辑运算符与集合运算符的组合应用 119

7.6.5 数学运算符与NOT运算符的组合应用 120

7.6.6 数学运算符与IN运算符的组合应用 120

7.6.7 数学运算符与集合运算符的组合应用 121

7.7 SQL中的表达式 121

7.7.1 CAST表达式的应用 121

7.7.2 CASE表达式的应用 123

7.8 小结 124

第8章 SQL函数 125

8.1 SQL函数基础 125

8.1.1 SQL语句函数 125

8.1.2 常用的SQL语句函数 126

8.2 日期函数和数学运算函数 126

8.2.1 日期时间函数 126

8.2.2 CONVERT函数转换日期、时间 129

8.2.3 数据运算函数 131

8.3 字符串函数 134

8.3.1 字符串处理函数介绍 134

8.3.2 字符转换函数 135

8.3.3 去字符串空格函数 136

8.3.4 取字符串长度的函数 137

8.3.5 查询包含部分字符串内容的数据 138

8.3.6 颠倒字符串的顺序 138

8.3.7 字符串替换 139

8.4 聚合函数 139

8.4.1 聚合函数概述 139

8.4.2 SUM函数运算 140

8.4.3 MAX函数运算 141

8.4.4 MIN函数运算 141

8.4.5 AVG函数运算 142

8.4.6 COUNT函数运算 143

8.4.7 聚合函数的组合使用 144

8.5 小结 144

第9章 连接查询 145

9.1 多表连接 145

9.1.1 多表连接的优点 145

9.1.2 简单的两表连接 145

9.1.3 多表连接举例 147

9.1.4 UNION JOIN连接表 149

9.2 自连接与自然连接 149

9.2.1 自连接 149

9.2.2 自然连接 150

9.3 内连接 151

9.3.1 等值连接 151

9.3.2 不等值连接 152

9.3.3 使用内连接实现多表连接 153

9.3.4 在内连接中使用聚合函数 154

9.4 外连接 154

9.4.1 左外连接 154

9.4.2 右外连接 156

9.4.3 全外连接 157

9.4.4 在外连接中使用聚合函数 158

9.5 交叉连接 160

9.5.1 交叉连接的定义 160

9.5.2 交叉连接举例 160

9.6 多表连接的综合应用 161

9.6.1 内连接与左外连接的综合应用 161

9.6.2 内连接与右外连接的综合应用 162

9.6.3 UNION集合运算与多表连接应用 163

9.7 小结 163

第10章 子查询 164

10.1 子查询的简单应用 164

10.1.1 子查询概述 164

10.1.2 在多表查询中使用子查询 165

10.1.3 在子查询中使用聚合函数 167

10.1.4 使用ANY或ALL运算符 168

10.1.5 使用子查询创建视图 169

10.2 使用IN语句的子查询 170

10.2.1 简单的IN语句子查询 171

10.2.2 使用IN子查询实现集合交运算 171

10.2.3 使用IN子查询实现集合差运算 172

10.3 使用EXISTS语句的子查询 172

10.3.1 简单的EXISTS语句子查询 172

10.3.2 使用EXISTS子查询实现两表交集 173

10.3.3 使用EXISTS子查询实现两表并集 174

10.3.4 使用NOT EXISTS的子查询 174

10.4 相关子查询 175

10.4.1 使用IN引入相关子查询 175

10.4.2 使用比较运算符引入相关子查询 175

10.4.3 在HAVING子句中使用相关子查询 176

10.5 UNIQUE子查询与嵌套子查询 177

10.5.1 UNIQUE子查询 177

10.5.2 嵌套子查询 178

10.6 小结 178

第4篇 T-SQL开发常用操作篇第11章 数据的维护操作 180

11.1 数据的插入操作 180

11.1.1 INSERT语句的基本语法 180

11.1.2 插入单条记录 181

11.1.3 NULL的插入 183

11.1.4 由VALUES关键字插入多行数据 184

11.1.5 使用SELECT语句插入数据 184

11.1.6 通过视图插入数据 187

11.1.7 使用子查询插入数据 188

11.2 数据的更新操作 189

11.2.1 UPDATE语句的基本语法 189

11.2.2 使用UPDATE语句更新指定的列值 189

11.2.3 数据字段中NULL的更改 190

11.2.4 更新全部数据 191

11.2.5 利用子查询更新数据 191

11.2.6 通过视图更新表数据 193

11.3 数据的删除操作 194

11.3.1 DELETE语句的语法结构 194

11.3.2 删除指定行的数据 194

11.3.3 删除所有数据 195

11.3.4 通过视图删除表数据 196

11.3.5 使用子查询删除数据 197

11.3.6 使用TRUNCATE TABLE语句 197

11.4 小结 198

第12章 完整性控制 199

12.1 完整性约束概述 199

12.1.1 数据的完整性简介 199

12.1.2 完整性约束的类型 200

12.1.3 数据完整性的意义 200

12.2 约束 200

12.2.1 DEFAULT约束 201

12.2.2 CHECK约束 203

12.2.3 PRIMARY KEY约束 205

12.2.4 UNIQUE约束 206

12.2.5 FOREIGN KEY约束 208

12.2.6 NOT NULL约束 209

12.2.7 列约束和表约束 210

12.3 规则 210

12.3.1 创建规则 210

12.3.2 规则的绑定与松绑 211

12.4 域约束与断言 214

12.4.1 域与域约束 214

12.4.2 利用断言创建多表约束 215

12.5 默认值 216

12.5.1 创建默认值 216

12.5.2 默认值的绑定与松绑 216

12.6 小结 218

第5篇 T-SQL高级编程篇 220

第13章 存储过程 220

13.1 存储过程概述 220

13.1.1 存储过程的基本概念 220

13.1.2 存储过程的优缺点 220

13.2 存储过程中常用的流控制语句 221

13.2.1 IF...ELSE语句 221

13.2.2 BEGIN...END语句 223

13.2.3 DECLARE语句 223

13.2.4 GOTO语句 224

13.2.5 WAITFOR语句 225

13.2.6 WHILE、BREAK和CONTINUE语句 225

13.2.7 PRINT语句 226

13.2.8 RETURN语句 227

13.2.9 注释 228

13.3 创建与执行存储过程 229

13.3.1 创建存储过程 229

13.3.2 创建带参数的存储过程 231

13.3.3 创建带OUTPUT返回参数的存储过程 232

13.3.4 执行存储过程 233

13.4 存储过程的查看、修改和删除 237

13.4.1 系统存储过程 237

13.4.2 存储过程的查看 238

13.4.3 存储过程的重命名 239

13.4.4 修改存储过程 239

13.4.5 存储过程的删除 241

13.5 Oracle数据库中的控制流语句 241

13.5.1 IF条件语句 242

13.5.2 LOOP循环语句 243

13.5.3 FOR循环语句 243

13.5.4 WHILE循环语句 244

13.5.5 GOTO语句 244

13.6 Oracle数据库中的存储过程 245

13.6.1 Oracle数据库中创建存储过程 245

13.6.2 Oracle数据库中存储过程的执行 246

13.7 小结 246

第14章 触发器 247

14.1 触发器的基础知识 247

14.1.1 触发器的概念 247

14.1.2 触发器的种类 247

14.1.3 触发器的组成 248

14.1.4 触发器的优点 248

14.1.5 触发器执行环境 248

14.2 触发器的创建 249

14.2.1 创建触发器的语法结构 249

14.2.2 Inserted表和Deleted表 250

14.2.3 INSERT触发器 251

14.2.4 UPDATE触发器 255

14.2.5 DELETE触发器 260

14.2.6 INSTEAD OF触发器 265

14.2.7 嵌套触发器 267

14.2.8 递归触发器 270

14.3 查看触发器 272

14.3.1 使用系统存储过程sp_help查看触发器 272

14.3.2 使用系统存储过程sp_helptext查看触发器 272

14.3.3 使用系统存储过程sp_depends查看触发器 273

14.4 触发器的修改及删除 274

14.4.1 触发器的修改 274

14.4.2 触发器的删除 275

14.5 Oracle数据库中的触发器 275

14.5.1 Oracle触发器类型 275

14.5.2 触发器的创建 275

14.5.3 Oracle触发器的启用与禁用 277

14.5.4 Oracle触发器的删除 277

14.6 小结 277

第15章 游标 278

15.1 游标的定义 278

15.1.1 游标的基本概念 278

15.1.2 游标的分类 279

15.1.3 游标的作用及其应用 279

15.2 游标的使用 279

15.2.1 游标的创建 279

15.2.2 打开游标 280

15.2.3 关闭游标 280

15.2.4 释放游标 281

15.2.5 使用游标 281

15.2.6 检索游标 281

15.2.7 游标变量 283

15.3 游标的扩展使用 284

15.3.1 用于UPDATE操作的可更新游标 285

15.3.2 用于DELETE操作的可更新游标 287

15.3.3 可更新游标的综合操作 288

15.3.4 使用@@CURSOR_ROWS全局变量确定游标的行数 290

15.3.5 使用@@FETCH_STATUS全局变量检测FETCH操作的状态 290

15.3.6 使用系统过程管理游标 291

15.4 Oracle中游标的使用 292

15.4.1 显式游标与隐式游标 292

15.4.2 游标属性 294

15.4.3 参数化游标 294

15.4.4 游标中的循环 295

15.5 小结 297

第16章 事务控制和锁定 298

16.1 事务 298

16.1.1 事务概述 298

16.1.2 事务的特性 299

16.1.3 事务的分类 299

16.2 事务控制 300

16.2.1 事务控制操作 300

16.2.2 开始事务 300

16.2.3 提交事务 302

16.2.4 回滚事务 302

16.2.5 设置事务保存点 303

16.2.6 终止事务 304

16.3 并发控制 305

16.3.1 并发操作的问题 305

16.3.2 事务隔离级别 306

16.4 锁定 306

16.4.1 锁的作用及含义 306

16.4.2 锁的类型 306

16.4.3 SQL Server中表级锁的使用 307

16.4.4 设置隔离级别实现并发控制 309

16.4.5 死锁及其处理 311

16.5 小结 312

第17章 SQL安全 313

17.1 SQL安全概述 313

17.1.1 SQL安全的重要性 313

17.1.2 SQL安全的对象和权限 313

17.2 用户管理 314

17.2.1 创建SQL用户 314

17.2.2 删除SQL用户 315

17.3 角色管理 315

17.3.1 角色的优点 316

17.3.2 创建角色 316

17.3.3 删除角色 317

17.3.4 授予角色 317

17.3.5 取消角色 318

17.4 权限管理 319

17.4.1 授予权限 319

17.4.2 撤销权限 320

17.4.3 查询权限控制 321

17.4.4 插入操作权限控制 323

17.4.5 删除操作权限控制 324

17.4.6 更新操作权限控制 325

17.5 SQL Server中的安全管理 327

17.5.1 SQL Server中的用户管理 327

17.5.2 SQL Server中的角色管理 329

17.5.3 SQL Server中的权限管理 330

17.6 Oracle中的安全管理 331

17.6.1 Oracle中的用户管理 331

17.6.2 Oracle中的权限管理 332

17.7 小结 332

第18章 嵌入式SQL 333

18.1 SQL的调用 333

18.1.1 直接调用SQL 333

18.1.2 SQL调用层接口(CLI) 334

18.2 嵌入式SQL的使用 335

18.2.1 嵌入式SQL 335

18.2.2 SQL通信区 336

18.2.3 主变量 337

18.2.4 在嵌入式SQL中使用SQL语句 338

18.2.5 在嵌入式SQL中使用游标 339

18.3 嵌入式SQL在SQL Server中应用 341

18.3.1 嵌入式SQL代码 341

18.3.2 预编译文件 342

18.3.3 设置连接VC++6.0 344

18.3.4 编译运行程序 346

18.4 小结 346

第6篇 T-SQL结合流行语言进行开发篇第19章 C#与SQL Server的开发与应用 348

19.1 C#开发环境 348

19.1.1 C#介绍 348

19.1.2 C#开发环境 348

19.2 C#连接数据库 352

19.2.1 C#中的数据库控件介绍 352

19.2.2 数据库连接举例 352

19.3 数据查询应用 357

19.3.1 普通数据查询的实现 357

19.3.2 连接查询的实现 359

19.3.3 子查询的实现 360

19.3.4 复合查询的实现 362

19.4 运算符与表达式的应用 364

19.4.1 连接数据表的实现 364

19.4.2 算术运算符的应用 365

19.4.3 表达式的应用 366

19.5 数据维护操作的应用 367

19.5.1 添加数据的实现 367

19.5.2 更新数据的实现 369

19.5.3 删除数据的实现 370

19.6 触发器与存储过程的应用 371

19.6.1 在C#中应用触发器 371

19.6.2 在C#中应用存储过程的示例 373

19.7 小结 374

第20章 VB.NET与SQL Server的开发与应用 375

20.1 VB.NET介绍 375

20.1.1 了解VB.NET 375

20.1.2 VB.NET的新特点 376

20.2 VB.NET连接数据库 376

20.2.1 通过数据控件绑定连接数据库 377

20.2.2 通过数据对象直接连接数据库 379

20.3 数据查询应用 380

20.3.1 普通数据查询的实现 380

20.3.2 连接查询的实现 382

20.3.3 子查询的实现 383

20.3.4 复合查询的实现 386

20.4 运算符与表达式的应用 388

20.4.1 连接数据表的实现 388

20.4.2 算术运算符的应用 389

20.4.3 表达式的应用 390

20.5 数据维护与触发器的应用 392

20.5.1 添加数据的实现 392

20.5.2 更新数据的实现 393

20.5.3 删除数据的实现 395

20.5.4 在VB.NET中应用触发器 396

20.6 小结 398

第21章 VB 6.0与SQL Server的开发与应用 399

21.1 VB 6.0开发环境 399

21.1.1 VB 6.0介绍 399

21.1.2 VB 6.0的版本 399

21.1.3 VB 6.0开发环境 400

21.2 VB 6.0连接数据库 403

21.2.1 VB 6.0中的数据库控件介绍 403

21.2.2 数据库连接举例 404

21.3 数据查询应用 407

21.3.1 普通数据查询的实现 407

21.3.2 连接查询的实现 408

21.3.3 子查询的实现 409

21.3.4 复合查询的实现 410

21.4 运算符与表达式的应用 411

21.4.1 连接数据表的实现 411

21.4.2 算术运算符的应用 412

21.4.3 表达式的应用 413

21.5 数据维护操作的应用 414

21.5.1 添加数据的实现 415

21.5.2 更新数据的实现 416

21.5.3 删除数据的实现 417

21.6 触发器与存储过程的应用 418

21.6.1 在VB 6.0中应用触发器 418

21.6.2 在VB 6.0中应用存储过程 419

21.7 小结 420

第22章 VC++6.0与SQL Server的开发与应用 421

22.1 VC++6.0开发环境 421

22.1.1 VC++6.0介绍 421

22.1.2 MFC编程 421

22.1.3 VC++6.0开发环境 422

22.2 VC++6.0连接数据库 425

22.2.1 ADO数据控件介绍 425

22.2.2 数据库连接举例 425

22.3 数据查询应用 431

22.3.1 普通数据查询的实现 431

22.3.2 连接查询的实现 435

22.3.3 子查询的实现 436

22.3.4 复合查询的实现 438

22.4 运算符与表达式的应用 439

22.4.1 连接数据表的实现 439

22.4.2 算术运算符的应用 440

22.4.3 表达式的应用 441

22.5 数据维护操作的应用 442

22.5.1 添加数据的实现 442

22.5.2 更新数据的实现 443

22.5.3 删除数据的实现 445

22.6 小结 446

第23章 PHP访问SQL Server 2005 447

23.1 PHP开发环境 447

23.1.1 PHP简介及其特点 447

23.1.2 PHP开发环境的安装 448

23.2 PHP连接SQL Server服务器 449

23.2.1 使用PHP的MSSQL扩展 449

23.2.2 PHP连接SQL Server的必要条件 449

23.3 使用PHP存取SQL Server数据库 451

23.3.1 选择操作的数据库 451

23.3.2 在数据库中创建表 452

23.3.3 删除存在的数据表 453

23.4 对数据库中表的操作 454

23.4.1 向表中添加记录 454

23.4.2 浏览表中记录 455

23.4.3 修改已有记录 456

23.4.4 删除指定记录 457

23.5 可回复留言板的开发(PHP+SQL Server) 458

23.5.1 数据表的设计 458

23.5.2 配置文件的创建 459

23.5.3 创建系统运行的表 459

23.5.4 创建留言显示模块 460

23.5.5 创建留言添加模块 464

23.5.6 进入留言管理模块 467

23.5.7 创建留言修改模块 470

23.5.8 创建留言删除模块 472

23.6 小结 473

代码3-1 创建SQL Server数据库 36

代码3-2 删除SQL Server数据库 37

代码3-3 修改数据库的名称 39

代码3-4 扩充SQL Server数据库 39

代码3-5 压缩SQL Server数据库的数据文件 40

代码3-6 压缩SQL Server数据库的日志文件 40

代码3-7 使用BULK INSFRT语句导入数据 43

代码3-8 查看当前系统中所有数据库的信息 45

代码3-9 查看当前系统中某一数据库的信息 45

代码4-1 创建数据表 49

代码4-2 在数据表中添加非空约束 50

代码4-3 指定表中列的缺省值 51

代码4-4 添加非空约束的列 53

代码4-5 修改数据表中列的长度 54

代码4-6 修改数据表中列的数据类型 54

代码4-7 删除数据表中的列 55

代码4-8 删除数据表 55

代码4-9 更改数据表名称 56

代码4-10 更改数据表中列的名称 56

代码5-1 对数值字段创建非簇索引 59

代码5-2 强制使用非簇索引No_Index查询数据表 60

代码5-3 对字符字段创建非簇索引 60

代码5-4 强制使用非簇索引sName_Index查询数据表 60

代码5-5 创建簇索引ENo index 61

代码5-6 创建簇索引EName_index 61

代码5-7 创建惟一索引 62

代码5-8 创建复合索引 62

代码5-9 创建多字段的复合索引 63

代码5-10 创建升序与降序排序组合的复合索引 64

代码5-11 删除索引 65

代码5-12 在单个表中创建视图 67

代码5-13 创建具有限制条件的视图 68

代码5-14 在视图中创建视图 68

代码5-15 创建视图列的别名 69

代码5-16 创建视图时使用中文别名 69

代码5-17 更改视图的名称 70

代码5-18 修改视图使查询数据增加一列 71

代码5-19 修改视图 71

代码5-20 删除视图 72

代码5-21 利用视图简化表的复杂连接 72

代码5-22 创建多表视图 73

代码5-23 利用视图简化复杂查询 74

代码6-1 查询单列字段信息 78

代码6-2 查询多列数据信息 78

代码6-3 查询所有字段的数据信息 79

代码6-4 通过指定数据表中所有字段来查询数据信息 79

代码6-5 去掉查询结果中的重复值 80

代码6-6 去掉多列查询结果中的重复值 80

代码6-7 在查询数据时使用别名 81

代码6-8 将查询结果进行升序排序 82

代码6-9 将查询结果按照字符型字段进行升序排序 82

代码6-10 将查询结果进行升序排序 83

代码6-11 将查询结果进行降序排序 83

代码6-12 将查询结果按照字符型字段进行降序排序 84

代码6-13 将查询结果按照日期型字段进行降序排序 84

代码6-14 实现多列升序排序 85

代码6-15 实现多列降序排序 85

代码6-16 多列字段先升序后降序混合排序 86

代码6-17 多列字段先降序后升序混合排序 86

代码6-18 将查询结果进行分组 87

代码6-19 将查询结果进行分组 87

代码6-20 GROUP BY子句中的NULL处理 87

代码6-21 将分组数据升序排序 88

代码6-22 将分组数据降序排序 88

代码6-23 HAVING子句的应用 89

代码6-24 单条件查询 89

代码6-25 使用“>”运算符进行条件查询 90

代码6-26 使用“>”运算符查询日期时间数据 90

代码6-27 使用“>=”运算符进行条件查询 91

代码6-28 使用“>=”运算符查询日期时间数据 91

代码6-29 使用“<>”运算符查询数据 91

代码6-30 使用“!<”运算符查询数据 92

代码6-31 使用“!>”运算符查询数据 92

代码6-32 使用BETWEEN运算符查询数值区间数据 93

代码6-33 使用BETWEEN运算符查询日期区间数据 93

代码6-34 使用TOP子句查询数据表中前3条记录 93

代码6-35 在TOP子句中使用PERCENT关键字 94

代码6-36 使用IS NOT NULL运算符查询数据 94

代码6-37 使用IS NULL运算符查询数据 95

代码6-38 使用LIKE运算符进行查询 96

代码6-39 使用NOT LIKE运算符进行查询 96

代码6-40 使用“_”通配符查询数据信息 97

代码6-41 将“_”通配符放在与其一起作为匹配字符的前面 97

代码6-42 将“_”通配符放在与其一起作为匹配字符的中间 98

代码6-43 全部使用“_”通配符查询数据信息 98

代码6-44 将“%”通配符放在与其一起作为匹配字符的后面 99

代码6-45 将“%”通配符放在与其一起作为匹配字符的前面 99

代码6-46 将“%”通配符放在与其一起作为匹配字符的两端 100

代码6-47 将“%”通配符放在与其一起作为匹配字符的中间 100

代码6-48 使用“[]”通配符查询以“吉”或者“辽”字符开头的员工信息 101

代码6-49 使用“[]”通配符查询以“吉”字开头并且值为6个字符的数据 101

代码6-50 使用“[^]”通配符查询数据信息 102

代码7-1 使用AND运算符实现条件查询 104

代码7-2 使用多个AND运算符实现条件查询 104

代码7-3 使用OR运算符实现条件查询 105

代码7-4 使用多个OR运算符实现条件查询 106

代码7-5 运算符AND、OR的组合使用 107

代码7-6 多个AND、OR运算符的组合使用 107

代码7-7 使用IN运算符实现查询 108

代码7-8 使用IN运算符实现查询 108

代码7-9 使用NOT IN运算符实现查询 108

代码7-10 NOT运算符查询 109

代码7-11 使用NOT运算符实现查询 109

代码7-12 NULL的取反 110

代码7-13 NOT运算符取反查询 110

代码7-14 NOT运算符与BETWEEN运算符的组合使用 111

代码7-15 NOT运算符与BETWEEN运算符组合使用查询数值数据 111

代码7-16 使用“+”运算符 112

代码7-17 使用“*”运算符 112

代码7-18 使用“/”运算符 113

代码7-19 使用“%”运算符 113

代码7-20 数学运算符的组合使用 113

代码7-21 UNION运算符的使用 114

代码7-22 组合带限制条件的数据表信息 115

代码7-23 对多表进行UNION运算 116

代码7-24 将使用UNION运算符将查询出的结果进行排序 116

代码7-25 INTERSECT运算符的使用 117

代码7-26 INTERSECT运算符的使用 117

代码7-27 AND运算符与IN运算符的组合应用 118

代码7-28 AND运算符与NOT运算符的组合应用 118

代码7-29 AND运算符与算术运算符的组合应用 119

代码7-30 逻辑运算符与集合运算符的组合应用 119

代码7-31 数学运算符与NOT运算符的组合应用 120

代码7-32 算术运算符与IN运算符的组合应用 120

代码7-33 数学运算符与集合运算符的组合应用 121

代码7-34 使用CAST表达式转换日期数据类型 122

代码7-35 使用CAST表达式转换数值数据类型 123

代码7-36 使用CAST表达式转换数值与日期数据类型 123

代码7-37 CASE表达式的应用 124

代码8-1 提取日期值 127

代码8-2 重新组合提取的日期值 127

代码8-3 DATEADD函数的应用 128

代码8-4 GETDATE函数的应用 128

代码8-5 DATEDIFF函数的应用 128

代码8-6 计算员工的年龄 129

代码8-7 获得当前系统的日期和时间 130

代码8-8 定义日期的显示格式(一) 130

代码8-9 定义日期的显示格式(二) 131

代码8-10 定义日期的显示格式(三) 131

代码8-11 获得表达式的绝对值 132

代码8-12 使用ROUND函数 132

代码8-13 使用CEILING函数和FLOOR函数 133

代码8-14 使用正弦与余弦相关函数 133

代码8-15 获得对数值 133

代码8-16 SQRT函数与RAND函数的应用 133

代码8-17 PI函数的使用 134

代码8-18 UPPER函数的使用 135

代码8-19 LOWER函数的使用 136

代码8-20 使用RTRIM函数去除字符串空格 136

代码8-21 去掉字符串前端的空格 136

代码8-22 使用LEN函数获得字符串的长度 137

代码8-23 LEFT函数的使用 138

代码8-24 SUBSTRING函数的使用 138

代码8-25 使用REVERSE函数颠倒字符串的排序顺序 138

代码8-26 使用REPLACE函数替换字符串 139

代码8-27 SUM函数的应用 140

代码8-28 使用SUM函数获得多列数据的总和 140

代码8-29 MAX函数的应用 141

代码8-30 MAX函数用于时间类型的数据 141

代码8-31 MAX函数用于字符类型的数据 141

代码8-32 MIN函数的应用 141

代码8-33 MIN函数用于时间类型的数据 142

代码8-34 MIN函数用于字符类型的数据 142

代码8-35 AVG函数的应用 142

代码8-36 获得满足一定条件数据的平均值 142

代码8-37 COUNT函数的应用 143

代码8-38 获取多列中所有记录的行数 143

代码8-39 获得满足一定条件数据的记录总数 143

代码8-40 聚合函数的组合使用 144

代码9-1 实现两表连接 146

代码9-2 不指明连接关系的两表连接 146

代码9-3 实现3个表的连接 147

代码9-4 实现多个表的连接 148

代码9-5 使用自连接 149

代码9-6 使用自然连接两个数据表 151

代码9-7 使用WHERE子句实现等值连接 151

代码9-8 使用内连接等值连接实现查询 152

代码9-9 排序内连接的查询结果 152

代码9-10 使用内连接不等值连接实现查询 152

代码9-11 通过内连接实现多表连接 153

代码9-12 在内连接中使用聚合函数 154

代码9-13 使用左外连接实现查询 155

代码9-14 排序左外连接的查询结果 155

代码9-15 使用*=符号实现左外连接查询 156

代码9-16 使用右外连接实现查询 156

代码9-17 使用“=*”符号实现右外连接查询 157

代码9-18 使用全外连接实现查询 158

代码9-19 在左外连接中使用聚合函数 158

代码9-20 在右外连接中使用聚合函数 159

代码9-21 在全连接中使用聚合函数 159

代码9-22 使用交叉连接实现查询 161

代码9-23 使用内连接与左外连接实现查询 162

代码9-24 使用内连接与右外连接实现查询 162

代码9-25 UNION集合运算与多表连接应用 163

代码10-1 在两个表中使用子查询 165

代码10-2 使用!=运算符查询数据 166

代码10-3 在多个表中使用子查询 166

代码10-4 在子查询中使用聚合函数 167

代码10-5 在WHERE子句的表达式中使用子查询 167

代码10-6 在判断表达式两边使用聚合函数子查询 167

代码10-7 在SELECT语句的查询列中使用子查询 168

代码10-8 ALL子查询的使用 169

代码10-9 ANY子查询的使用 169

代码10-10 使用子查询创建视图 170

代码10-11 在两个表中使用子查询创建视图 170

代码10-12 使用IN子查询查询数据信息 171

代码10-13 使用IN子查询实现集合交运算 171

代码10-14 使用IN子查询实现集合差运算 172

代码10-15 使用EXISTS语句子查询 173

代码10-16 使用EXISTS子查询实现两表交集 173

代码10-17 使用EXISTS子查询实现两表并集 174

代码10-18 使用NOT EXISTS语句子查询 174

代码10-19 使用IN引入相关子查询 175

代码10-20 使用比较运算符引入相关子查询 175

代码10-21 在HAVING子句中使用相关子查询 177

代码10-22 嵌套子查询的使用 178

代码11-1 插入指定列的单条记录 181

代码11-2 向货物信息表(GoodsInfo)中添加整行数据 182

代码11-3 NULL值的插入 183

代码11-4 由VALUES关键字插入多行数据 184

代码11-5 使用INSERT INTO...SELECT语句向新创建的表中复制数据 185

代码11-6 使用INSERT INTO...SELECT语句在数据表之间复制数据 186

代码11-7 使用SELECT...INTO语句复制数据 187

代码11-8 通过视图插入数据 187

代码11-9 使用子查询插入数据 188

代码11-10 指定修改数据表中的单列数据 189

代码11-11 指定修改数据表中的多列数据 190

代码11-12 在修改数据表中数据时对NULL的处理 190

代码11-13 修改数据表中所有的数据信息 191

代码11-14 利用子查询更新数据 192

代码11-15 以外表值为查询条件更新数据 192

代码11-16 通过视图更新表数据 193

代码11-17 删除指定行的数据 195

代码11-18 根据组合条件删除数据表中的数据 195

代码11-19 删除所有数据 196

代码11-20 通过视图删除表数据 196

代码11-21 使用子查询删除数据 197

代码11-22 使用TRUNCATE TABLE删除数据表中所有的数据信息 198

代码12-1 设置DEFAULT约束 201

代码12-2 对日期字段设置DEFAULT约束 202

代码12-3 对字符型字段设置DEFAULT约束 202

代码12-4 创建CHECK约束 204

代码12-5 创建多条件的CHECK约束 204

代码12-6 创建PRIMARY KEY约束 205

代码12-7 创建UNIQUE约束 207

代码12-8 在已经存在的表中创建UNIQUE约束 207

代码12-9 创建FOREIGN KEY约束 208

代码12-10 使用NOT NULL约束 209

代码12-11 创建员工性别规则 211

代码12-12 创建员工年龄规则 211

代码12-13 创建员工出生日期规则 211

代码12-14 创建限制电话号码长度的规则 211

代码12-15 使用存储过程Sp_bindrule绑定规则Sex_Rule 212

代码12-16 使用存储过程Sp_bindrule绑定规则Age_Rule 213

代码12-17 使用存储过程Sp_unbindrule给规则松绑 214

代码12-18 使用存储过程Sp_unbindrule给规则松绑 214

代码12-19 创建与使用域约束 214

代码12-20 利用断言创建多表约束 215

代码12-21 创建默认值Com_Sex 216

代码12-22 创建默认值Com_Date 216

代码12-23 使用存储过程Sp_bindefault绑定默认值Com_Sex 217

代码12-24 使用存储过程Sp_bindefault绑定默认值Com_Date 217

代码12-25 使用存储过程Sp_unbindefault给默认值Com_Sex松绑 217

代码12-26 使用存储过程Sp_unbindefault给默认值Com_Date松绑 218

代码13-1 IF...ELSE语句的使用 221

代码13-2 省略ELSE语句 222

代码13-3 IF...ELSE语句的顺序执行 222

代码13-4 BEGIN..END语句的使用 223

代码13-5 DECLARE语句的使用 224

代码13-6 GOTO语句的使用 224

代码13-7 使用WAITFOR语句延时修改信息 225

代码13-8 使用WAITFOR语句定时修改信息 225

代码13-9 WHILE与BREAK的使用 226

代码13-10 使用PRINT语句输出字符信息 227

代码13-11 使用PRINT语句显示局部变量中的信息 227

代码13-12 RETURN语句的使用 227

代码13-13 注释SQL语句 228

代码13-14 创建简单的存储过程 230

代码13-15 通过存储过程修改数据信息 230

代码13-16 通过存储过程删除数据信息 230

代码13-17 通过存储过程插入数据信息 230

代码13-18 创建带输入参数的存储过程(一) 231

代码13-19 创建带输入参数的存储过程(二) 231

代码13-20 创建带默认值参数的存储过程 232

代码13-21 创建带OUTPUT返回参数的存储过程 232

代码13-22 执行存储过程Show_employee 233

代码13-23 执行存储过程Show_Update_employee 234

代码13-24 执行存储过程Show_Del_employee 234

代码13-25 执行存储过程Insert_employee 234

代码13-26 执行存储过程Show_Sex_employee 234

代码13-27 执行存储过程Show_InStr_employee删除数据 235

代码13-28 执行存储过程Show_InStr_employee修改数据 235

代码13-29 执行存储过程Show_InStr_employee插入数据 236

代码13-30 执行存储过程Show_Default_employee 236

代码13-31 执行存储过程Show_Select_employee 237

代码13-32 查看存储过程Show_Select_employee中的源代码 238

代码13-33 重命名存储过程 239

代码13-34 修改存储过程 240

代码13-35 修改带参数的存储过程 241

代码13-36 删除存储过程Show_employee 241

代码13-37 同时删除多个存储过程 241

代码13-38 判断员工的年龄 242

代码13-39 使用IF条件语句表达形式2判断员工的年龄 242

代码13-40 使用IF条件语句表达形式3判断员工的年龄 242

代码13-41 使用LOOP循环语句输出自然数 243

代码13-42 使用FOR循环语句输出自然数 243

代码13-43 使用WHILE循环语句输出自然数 244

代码13-44 使用GOTO语句 245

代码13-45 在Oracle数据库中创建存储过程 246

代码14-1 通过INSERT触发器弹出提示信息 251

代码14-2 通过INSERT触发器查询数据表中的数据信息 252

代码14-3 通过INSERT触发器更改数据表中的数据信息 252

代码14-4 通过INSERT触发器删除数据表中的数据信息 253

代码14-5 通过INSERT触发器向数据表中插入数据 253

代码14-6 创建有条件的触发器 254

代码14-7 通过UPDATE触发器弹出提示信息 255

代码14-8 通过UPDATE触发器查询数据表中的数据信息 256

代码14-9 通过UPDATE触发器更改数据表中的数据 256

代码14-10 通过UPDATE触发器删除数据表中的数据信息 257

代码14-11 通过UPDATE触发器向数据表中插入数据信息 258

代码14-12 创建UPDATE触发器 259

代码14-13 通过DELETE触发器弹出提示信息 261

代码14-14 通过DELETE触发器查询数据表中的数据信息 261

代码14-15 通过DELETE触发器更改数据表中的数据 262

代码14-16 通过DELETE触发器删除数据表中的数据 262

代码14-17 通过DELETE触发器向数据表中插入数据信息 263

代码14-18 创建DELETE触发器 264

代码14-19 创建INSTEAD OF触发器向视图中插入数据 266

代码14-20 在INSTEAD OF触发器中应用判断参数 266

代码14-21 使用嵌套触发器 268

代码14-22 创建递归触发器 271

代码14-23 使用系统存储过程sp_help查看触发器基本信息 272

代码14-24 使用系统存储过程sp_helptext查看触发器的创建语句 272

代码14-25 查看触发器所引用的表 273

代码14-26 查看数据表中所有涉及到的触发器信息 273

代码14-27 修改触发器update_student 274

代码14-28 删除触发器update_student 275

代码14-29 在Oracle数据库中创建DML触发器 276

代码14-30 启用数据表中所有的触发器 277

代码14-31 禁用数据表中所有的触发器 277

代码14-32 删除触发器 277

代码15-1 创建游标 280

代码15-2 打开游标Goods_Cursor 280

代码15-3 关闭游标Goods_Cursor 281

代码15-4 释放游标Goods_Cursor 281

代码15-5 使用FETCH语句检索游标 282

代码15-6 使用游标变量 284

代码15-7 用于UPDATE操作的可更新游标 285

代码15-8 用于UPDATE操作的可更新游标更改指定行数据 286

代码15-9 用于DELETE操作的可更新游标 288

代码15-10 可更新游标的综合应用 289

代码15-11 使用全局变量@@CURSOR_ROWS 290

代码15-12 使用全局变量@@FETCH_STATUS 291

代码15-13 显示数据库DB_Test中所有的GLOBAL游标及其属性 292

代码15-14 在Oracle中创建显式游标 293

代码15-15 在Oracle中创建隐式游标 293

代码15-16 创建带有参数的游标 295

代码15-17 使用LOOP循环 296

代码15-18 使用WHILE循环 296

代码15-19 使用FOR循环 297

代码16-1 在SQL Server中实现开始事务 301

代码16-2 提交事务 302

代码16-3 回滚事务 303

代码16-4 设置事务保存点 304

代码16-5 事务提交、回滚与保存点 304

代码16-6 表级锁的使用-用户U1执行的操作代码 308

代码16-7 READ UNCOMMITTED隔离级别的使用 309

代码16-8 REPEATABLE READ隔离级别的使用 310

代码16-9 导致死锁现象的示例 311

代码17-1 在SQL Server数据库中创建用户 315

代码17-2 删除SQL Server数据库创建的用户 315

代码17-3 在SQL Server 2005数据库中创建角色 316

代码17-4 在Oracle数据库中创建角色 317

代码17-5 删除角色 317

代码17-6 使用GRANT语句授予角色 318

代码17-7 把多个角色授予多个授权ID 318

代码17-8 取消角色 318

代码17-9 把多个角色从授权ID中取消 318

代码17-10 使用GRANT语句授予权限 319

代码17-11 使用REVOKE语句撤销UPDATE权限 320

代码17-12 撤销一个用户授予其他用户的UPDATE权限 321

代码17-13 查询权限控制 321

代码17-14 对数据表中的部分列执行查询权限控制 322

代码17-15 通过视图实现查询权限控制 322

代码17-16 收回某一查询权限的控制 322

代码17-17 撤销对整个数据表的查询权限控制 322

代码17-18 插入权限控制 323

代码17-19 通过视图实现插入权限控制 323

代码17-20 撤销插入权限控制 324

代码17-21 删除权限控制 324

代码17-22 通过视图实现删除权限控制 325

代码17-23 撤销删除权限控制 325

代码17-24 更新权限控制 326

代码17-25 对数据表中的部分列执行更新权限控制 326

代码17-26 通过视图实现更新权限控制 326

代码17-27 撤销某一列更新权限控制 327

代码17-28 撤销对整个数据表的更新权限控制 327

代码17-29 使用系统存储过程创建登录账号 328

代码17-30 使用系统存储过程查看登录账号信息 328

代码17-31 使用系统存储过程创建数据库用户账号 328

代码17-32 使用系统存储过程查看数据库用户账号 328

代码17-33 查看当前数据库中所有用户账号的信息 329

代码17-34 使用系统存储过程创建数据库角色 329

代码17-35 查看新创建数据库角色DbRole的信息 329

代码17-36 查看当前数据库中所有数据库角色的信息 330

代码17-37 将用户JOIN加入到新创建的数据库角色DbRole当中 330

代码17-38 查看数据库MyDataBase中所有角色的成员信息 330

代码17-39 创建数据库用户 331

代码17-40 修改数据库用户的密码 332

代码17-41 删除数据库用户 332

代码18-1 C语言中嵌入SQL语句中SQLCA 336

代码18-2 定义输入主变量 337

代码18-3 定义输出主变量 337

代码18-4 在嵌入式SQL中使用SELECT语句 338

代码18-5 在嵌入式SQL中使用UPDATE语句 338

代码18-6 在嵌入式SQL中使用DELETE语句 339

代码18-7 在嵌入式SQL中使用INSERT语句 339

代码18-8 在嵌入式SQL中使用游标 340

代码18-9 在嵌入式SQL的SELECT语句中使用游标 340

代码18-10 在SQL Server中使用嵌入式SQL 341

代码19-1 类文件PublicClass中的示例代码 355

代码19-2 程序启动时获取数据表中的数据信息 357

代码19-3 判断查询的字段名称 358

代码19-4 普通数据查询 358

代码19-5 连接数据查询 359

代码19-6 加载学生的基础信息 360

代码19-7 实现子查询 361

代码19-8 获取查询字段的值 362

代码19-9 实现复合查询 363

代码19-10 连接数据表 364

代码19-11 使用算术运算符计算货物总价 365

代码19-12 使用表达式给员工分组 366

代码19-13 保存数据信息 368

代码19-14 显示所选择的数据信息 369

代码19-15 更新数据信息 369

代码19-16 删除数据信息 370

代码19-17 保存数据后同时显示数据表中的数据信息 372

代码19-18 执行存储过程 373

代码20-1 类文件Mdu_Data中的示例代码 379

代码20-2 程序启动时获取数据库中的数据信息 379

代码20-3 判断查询的字段名称 381

代码20-4 普通数据查询 381

代码20-5 连接数据查询 382

代码20-6 加载学生的基础信息 384

代码20-7 实现子查询 384

代码20-8 获取查询字段的值 386

代码20-9 实现复合查询 386

代码20-10 连接数据表 388

代码20-11 使用算术运算符计算货物总价 389

代码20-12 使用表达式给员工分组 391

代码20-13 保存数据信息 392

代码20-14 显示所选择的数据信息 394

代码20-15 更新数据信息 394

代码20-16 删除数据信息 395

代码20-17 保存数据后同时显示数据表中的数据信息 397

代码21-1 模块中的程序代码 406

代码21-2 连接数据库 406

代码21-3 判断查询的字段名称 407

代码21-4 实现普通数据查询 407

代码21-5 实现连接查询 408

代码21-6 实现子查询 409

代码21-7 实现复合查询 411

代码21-8 连接数据表 412

代码21-9 使用算术运算符计算货物总价 413

代码21-10 使用表达式给员工分组 414

代码21-11 保存数据信息的实现 415

代码21-12 显示所选择的数据信息 416

代码21-13 更新数据信息的实现 416

代码21-14 删除数据信息 417

代码21-15 保存数据后同时显示数据表中的数据信息 418

代码21-16 执行存储过程 419

精品推荐