SQL结构化查询语言速学宝典

副标题:无

作   者:周峰,张振东,张术强编著

分类号:

ISBN:9787113108960

微信扫一扫,移动浏览光盘

简介

   本书讲解SQL语句在数据库开发中的技术和技巧,每个实例都具有很强   的实用性与可操作性。全书共分22章,分别讲解了数据库的运行环境及权   限设置、SQL和数据库的基本概念、数据库、数据库表、SQL查询、SQL数据   类型、SQL高级查询、SQL嵌套子查询、SQL多表连接查询、SQL数据处理、   SQL流程控制、视图、存储过程、函数、游标、触发器、事务、安全性、   SQL高级特性、数据库的维护、动态SQL和SQL高级查询。本书中的SQL代码   以SQL Server数据库为主。另外,本书还重点讲解Oracle和DB2关系数据库   中SQL的区别。    本书中的实例有的是作者的经验积累,有的源于实际开发项目,读者   在深入研究本书内容后,   能够在短时间内掌握数据库开发技术,快速提高编程水平。    本书适合SQL语言初学者、爱好者及具有一定编程经验的初级编程人员   使用,也适合一线   软件开发人员学习,还可以供大中专院校师生及培训机构学员阅读,亦适   合想快速提高实际编程   水平的编程人员和从事数据库编程的开发人员使用。   

目录

第1篇 sql基础篇

第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 创建多数据文件、多日志文件的数据库
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函数重命名数据库
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 创建含有主键、唯一键字段的数据库表
3.4.3 创建主键、外键关联的数据库表 46

3.4.4 创建含有check约束字段的数据库表 47

3.5 创建含有默认、计算字段的数据库表 48

3.5.1 创建含有默认值字段的数据库表 48

3.5.2 创建含有计算字段的数据库表 49

3.6 创建含有自动编号、排序字段的数据库表
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数据查询和处理篇

第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 显示职工的姓名、工资和职工评语信息
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产生虚拟表嵌套子查询
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常用对象技术篇

第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高级性能篇

第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


已确认勘误

次印刷

页码 勘误内容 提交人 修订印次

SQL结构化查询语言速学宝典
    • 名称
    • 类型
    • 大小

    光盘服务联系方式: 020-38250260    客服QQ:4006604884

    意见反馈

    14:15

    关闭

    云图客服:

    尊敬的用户,您好!您有任何提议或者建议都可以在此提出来,我们会谦虚地接受任何意见。

    或者您是想咨询:

    用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问

    Video Player
    ×
    Audio Player
    ×
    pdf Player
    ×
    Current View

    看过该图书的还喜欢

    some pictures

    解忧杂货店

    东野圭吾 (作者), 李盈春 (译者)

    亲爱的云图用户,
    光盘内的文件都可以直接点击浏览哦

    无需下载,在线查阅资料!

    loading icon