《SQL实战》(原著第2版)一书属于入门书,是一本用PostgreSQL写的SQL入门教程,先从基本的SQL知识开始说起,之后逐渐过渡到更高级的特性,最后以一些实际的数据用例作为结束。全书分为20章,主要内容包括:设置编码环境、创建数据库和表、查询数据——SELECT语句、数据类型、数据的导入与导出、SQL的基本数学与统计原理、连接关系数据库中的表、表格设计、通过分组和汇总提取信息、数据检查和修改、SQL中的统计函数、处理日期和时间、高级查询技术、挖掘文本以找到有意义的数据、利用PostGIS分析空间数据、使用json数据、使用视图、函数和触发器节省时间、从命令行使用postgresql、维护数据库、讲述你的数据故事。本书语言通俗易懂,作者选取了大量与生活工作贴近的实例进行讲解,帮助读者更好地理解及运用SQL。
第1章 设置编码环境 1
安装文本编辑器 1
从GitHub 下载代码和数据2
安装PostgreSQL 和pgAdmin3
在Windows 安装3
在macOS 安装 6
在Linux 安装 7
使用pgAdmin 9
启动pgAdmin 并设置主密码 9
连接默认的postgres 数据库 10
探索查询工具 12
自定义pgAdmin 13
pgAdmin 之外的选择 13
第2章 创建首个数据库和表 14
什么是表 14
创建数据库 15
在pgAdmin 中执行SQL 16
连接analysis 数据库 18
创建表 18
使用CREATE TABLE 语句 18
创建teachers 表 19
将行插入表 21
使用INSERT 语句 21
查看数据22
在代码出现问题时获得帮助22
格式化SQL 以提高可读性23
第3章 使用SELECT 开始探索数据25
基本的SELECT 语法25
查询一部分列26
通过ORDER BY 排序数据27
使用DISTINCT 查找唯一值29
使用WHERE 过滤行30
同时使用WHERE 和LIKE/ILIKE33
通过AND 和OR 组合操作符34
合而为一34
第4章 了解数据类型36
了解字符37
了解数字39
使用整数39
自动递增整数40
使用小数 41
选择合适的数字类型44
了解日期和时间44
在计算中使用interval 数据类型46
了解JSON 和JSONB47
使用各式各样的类型48
使用CAST 将值从一种类型转换为另一种类型48
使用CAST 速记法49
第5章 数据的导入与导出 51
处理带有分隔符的文本文件 51
处理标题行52
引用包含分隔符的列52
使用COPY 导入数据53
导入县的人口普查数据54
创建us_counties_pop_est_2019 表55
了解人口普查列及其数据类型56
使用COPY 导入人口普查数据57
检查导入的数据58
使用COPY 导入部分列59
使用COPY 导入部分行 61
在导入过程中向列添加值 61
使用COPY 导出数据63
导出所有数据63
导出特定列63
导出查询结果64
使用pgAdmin 进行导入和导出64
第6章 使用SQL 实现基本的算术和统计67
了解数学运算符和函数67
了解数学和数据类型68
加法、减法和乘法68
执行除法和取模69
计算指数、根和阶乘70
注意操作的顺序70
对人口普查表中的列进行数学运算 71
对列执行加法或减法72
计算全局占比73
跟踪百分比变化74
使用聚合函数计算平均数以及总和75
查找中位数76
通过百分位函数查找中位数77
查找人口普查数据的中位数以及百分位数78
使用百分位函数查找其他分位数79
发现模式80
第7章 在关系数据库中连接表82
使用JOIN 连接表82
使用键列关联表83
使用JOIN 查询多个表85
了解JOIN 的类型86
连接88
左连接和右连接89
全外连接90
交叉连接 91
使用NULL 查找包含缺失值的行92
了解表的三种关系93
一对一关系93
一对多关系94
多对多关系94
在连接中选择特定列94
通过表别名简化JOIN 语法95
连接多个表96
通过集合操作符合并查询结果98
UNION 和UNION ALL98
INTERSECT 和EXCEPT 100
在连接表的列中执行数学计算101
第8章 按需设计表 104
遵循命名惯例 104
用引号包围标识符以启用混合大小写 105
用引号包围标识符的隐患 105
命名标识符的准则 106
通过约束控制列值 106
主键:自然键和代理键 107
外键113
使用CASCADE 自动删除相关记录115
CHECK 约束115
UNIQUE 约束116
NOT NULL 约束117
如何删除限制条件或者在之后添加它们118
通过索引加快查询速度119
B 树:PostgreSQL 的默认索引119
使用索引时需要考虑的因素 122
第9章 通过分组和汇总提取信息 124
创建图书馆调查表 124
创建2018 年的图书馆数据表 125
创建2017 年和2016 年图书馆数据表 126
使用聚合函数探索图书馆数据 127
使用count() 统计行和值 127
使用max() 和min() 寻找最大值和最小值 130
使用GROUP BY 聚合数据 130
第10章 检查并修改数据 140
导入肉类、家禽和蛋类生产商数据 140
访问数据集 142
检查缺失值 143
检查不一致的数据值 144
使用length() 检查畸形值 145
修改表、列和数据 147
使用ALTER TABLE 修改表 147
使用UPDATE 修改值 148
使用RETURNING 查看被修改的数据 149
创建备份表 150
修复缺失的列值 150
更新值以保持一致性 153
通过串联修复邮政编码 154
跨表更新值 155
删除不需要的数据 157
从表中删除行 157
从表中删除列 158
从数据库中删除表 159
使用事务来保存或是撤销修改 159
提高更新大表时的性能161
第11章 SQL 中的统计函数 164
创建人口普查统计表 164
使用corr(Y ,X ) 测量相关性 166
检查其他相关关系 168
通过回归分析预测数值 169
通过r-Squaredc 查找自变量的影响 170
寻找方差和标准差171
使用SQL 创建排行榜 172
使用rank() 和dense_rank() 构建排名 172
使用PARTITION BY 在子分组中进行排名 174
为有意义的比较计算比率 175
寻找旅游相关企业的比率 176
平滑不均匀的数据 177
第12章 处理日期与时间 182
了解日期和时间的数据类型及函数 182
操作日期和时间 183
提取timestamp 值的组成部分 183
根据timestamp 组件创建日期时间值 185
检索当前日期和时间 186
处理时区 187
查找时区设置 187
设置时区 188
使用日期和时间进行计算 190
在纽约市的出租车数据中寻找模式191
在美铁数据中寻找模式 196
第13章 高级查询技术 201
使用子查询 201
在WHERE 子句中使用子查询进行筛选 201
使用子查询创建派生表 203
连接派生表 204
使用子查询生成列 205
了解子查询表达式 207
配合使用Subqueries 和LATERAL 209
使用公共表表达式 212
制作交叉表 214
安装crosstab() 函数 214
为调查结果制表 215
为城市温度读数制表 217
使用CASE 对值重新进行分类 219
在公共表表达式中使用CASE 220
第14章 挖掘文本以查找有意义的数据 223
使用字符串函数格式化文本 223
大小写格式化 223
字符信息 224
删除字符 224
提取并替换字符 225
使用正则表达式匹配文本模式 225
正则表达式符号 225
在WHERE 中使用正则表达式 227
使用正则表达式函数替换或分割文本 229
使用正则表达式函数将文本转换为数据 230
PostgreSQL 中的全文搜索 242
文本搜索数据类型 242
为全文搜索创建表 244
搜索演讲文本 245
根据相关性排列查询匹配结果 248
第15章 使用PostGIS 分析空间数据 252
启用PostGIS 并创建空间数据库 252
了解空间数据的构建块 253
了解二维几何图形 253
Point(点) 253
LineString(线串) 253
Polygon(多边形) 253
MultiPoint(点集合) 254
MultiLineString(线串集合) 254
MultiPolygon(多边形集合) 254
Well-Known Text 格式 254
投影和坐标系 255
空间参照系标识符 256
了解PostGIS 数据类型 256
使用PostGIS 函数创建空间对象 257
根据WKT 创建Geometry 类型 257
根据WKT 创建地理数据类型 259
使用点函数 259
使用线串函数 259
使用多边形函数 260
分析农贸市场数据 261
创建并填充地理列 261
添加空间索引 262
在给定的距离内查找地理位置 263
计算两地之间的距离 265
查找最近的地理位置 266
处理人口普查Shapefile 文件 267
了解shapefile 的内容 267
载入shapefile 文件 268
探索2019 年人口普查的县shapefile 270
检查指定范围内的人口统计数据 273
执行空间连接 274
探索道路和水路数据 275
连接人口普查的水道表和道路表 275
查找对象相交的位置 276
第16章 处理JSON 数据 278
了解JSON 结构 278
考虑何时在SQL 中使用JSON 280
使用json 和jsonb 数据类型 281
导入并索引JSON 数据 281
使用json 和jsonb 提取运算符 282
提取键值 283
提取数组元素 284
提取路径 286
包容性和存在性 287
分析地震数据 290
探索并载入地震数据 290
处理地震时间 292
查找最大和报告最多的地震 293
将地震JSON 转换为空间数据 295
生成并处理JSON 298
将查询结果转换为JSON 299
键和值的添加、删除以及更新 301
使用JSON 处理函数 303
查找数组长度 303
以行的形式返回数组元素 303
第17章 使用视图、函数和触发器以提高效率 307
使用视图简化查询 307
视图的创建与查询 308
物化视图的创建与刷新311
使用视图对数据进行插入、更新和删除 312
创建你的函数和过程 315
创建percent_change() 函数 316
使用percent_change() 函数 317
使用过程更新数据 318
在函数中使用Python 语言 321
使用触发器自动执行数据库操作 322
记录表中的成绩更新 323
自动对温度进行分类 326
第18章 通过命令行使用PostgreSQL 330
为psql 设置命令行 330
在Windows 上设置psql 331
在macOS 上设置psql 334
在Linux 上设置psql 336
使用psql 336
启动psql 并连接至数据库 336
在psql 上运行SQL 查询 339
导航并格式化结果 341
获取数据库信息的元命令 344
导入、导出以及使用文件 345
加速任务的附加命令行实用程序 348
使用shp2pgsql 载入Shapefiles 349
第19章 维护数据库 351
通过VACUUM 移除未使用空间 351
追踪表的大小 352
监控自动清理过程 354
执行手动清理 355
使用VACUUM FULL 减少表的体积 355
改变服务器设置 356
定位并编辑postgresql.conf 356
使用pg_ctl 重新加载设置 358
备份和还原数据库 359
使用pg_dump 导出数据库或者表 359
使用pg_restore 还原被导出的数据库 359
探索额外的备份和还原选项 360
第20章 讲述你的数据故事 361
从问题开始 361
记录流程 362
收集数据 362
在缺少数据时构建自己的数据库 362
评估数据来源 363
使用查询访问数据 363
咨询数据的所有者 364
识别关键指标和长期趋势 364
询问原因 365
传达你的分析结果 366
附录 更多PostgreSQL 资源 368
PostgreSQL 开发环境 368
PostgreSQL 实用程序、工具和扩展 369
PostgreSQL 新闻和社区 369
文档 370