具体描述
本书是畅销书《SQL基础教程》第2版,介绍了关系数据库以及用来操作关系数据库的SQL语言的使用方法。书中通过丰富的图示、大量示例程序和详实的操作步骤说明,让读者循序渐进地掌握SQL的基础知识和使用技巧,切实提高编程能力。每章结尾设置有练习题,帮助读者检验对各章内容的理解程度。另外,本书还将重要知识点总结为“法则”,方便读者随时查阅。第2版除了将示例程序更新为对应新版本的DB的SQL之外,还新增了一章,介绍如何从应用程序执行SQL。
作者简介
作者简介:
MICK
日本资深数据库工程师,就职于SI企业,致力于商业智能和数据仓库的开发。为CodeZine(http://codezine.jp)及IT杂志WEB+DB PRESS撰写技术文章。著作有《跟达人学SQL》《跟达人学DB设计》,是Joe Celko's SQL Puzzles and Answers,Second Edition、Joe Celko's SQL for Smarties,Fourth Edition: Advanced SQL Programming的日文版的译者。
译者简介:
孙淼
从事对日软件设计和研发工作十余年,曾于2007年至2009年赴日学习工作,2015年至今再次长期赴日工作。精通应用Java、PHP进行Web框架的设计开发,并且有Oracle、Teradata、MySQL、NoSQL等多种数据库的设计开发经验。乐于品味生活细微的点滴,热衷于品尝和制作美食。译有《SQL基础教程》等。
罗勇
从事对日软件设计和研发工作十余年,曾多次赴日学习工作,目前就职于日本某大型企业。痴迷于技术和框架的研究,多次参与项目的需求分析、概要设计,精通多语言的Web框架和数据库的设计开发。业余爱好足球,和家人旅行。译有《SQL基础教程》《NoSQL数据库入门》《明解C语言》等。
目录信息
0-1 PostgreSQL的安装和连接设置 3
安装步骤 3
修改设置文件 7
0-2 通过PostgreSQL执行SQL语句 9
连接PostgreSQL(登录) 9
执行SQL语句 10
创建学习用的数据库 11
连接学习用的数据库(登录) 12
第1章 数据库和SQL 13
1-1 数据库是什么 15
我们身边的数据库 15
为什么DBMS那么重要 16
DBMS的种类 18
1-2 数据库的结构 20
RDBMS的常见系统结构 20
表的结构 22
1-3 SQL概要 25
标准SQL 25
SQL语句及其种类 26
SQL的基本书写规则 27
1-4 表的创建 30
表的内容的创建 30
数据库的创建(CREATE DATABASE语句) 31
表的创建(CREATE TABLE语句) 31
命名规则 33
数据类型的指定 34
约束的设置 35
1-5 表的删除和更新 37
表的删除(DROP?TABLE语句) 37
表定义的更新(ALTER TABLE语句) 38
向Product表中插入数据 39
练习题 42
第2章 查询基础 43
2-1 SELECT语句基础 45
列的查询 45
查询出表中所有的列 47
为列设定别名 48
常数的查询 50
从结果中删除重复行 50
根据WHERE语句来选择记录 53
注释的书写方法 55
2-2 算术运算符和比较运算符 57
算术运算符 57
需要注意NULL 58
比较运算符 60
对字符串使用不等号时的注意事项 62
不能对NULL使用比较运算符 65
2-3 逻辑运算符 68
NOT运算符 68
AND运算符和OR运算符 70
通过括号强化处理 72
逻辑运算符和真值 74
含有NULL时的真值 76
练习题 78
第3章 聚合与排序 79
3-1 对表进行聚合查询 81
聚合函数 81
计算表中数据的行数 82
计算NULL之外的数据的行数 83
计算合计值 84
计算平均值 86
计算最大值和最小值 87
使用聚合函数删除重复值(关键字DISTINCT) 89
3-2 对表进行分组 91
GROUP BY子句 91
聚合键中包含NULL的情况 93
使用WHERE子句时GROUP BY的执行结果 94
与聚合函数和GROUP BY子句有关的常见错误 96
3-3 为聚合结果指定条件 101
HAVING子句 101
HAVING子句的构成要素 104
相对于HAVING子句,更适合写在WHERE子句中的条件 105
3-4 对查询结果进行排序 108
ORDER BY子句 108
指定升序或降序 110
指定多个排序键 111
NULL的顺序 111
在排序键中使用显示用的别名 112
ORDER BY子句中可以使用的列 114
不要使用列编号 114
练习题 116
第4章 数据更新 117
4-1 数据的插入(INSERT语句的使用方法) 119
什么是INSERT 119
INSERT语句的基本语法 120
列清单的省略 123
插入NULL 123
插入默认值 124
从其他表中复制数据 126
4-2 数据的删除(DELETE语句的使用方法) 129
DROP?TABLE语句和DELETE语句 129
DELETE语句的基本语法 129
指定删除对象的DELETE语句(搜索型DELETE) 130
4-3 数据的更新(UPDATE语句的使用方法) 133
UPDATE语句的基本语法 133
指定条件的UPDATE语句(搜索型UPDATE) 134
使用NULL进行更新 135
多列更新 136
4-4 事务 138
什么是事务 138
创建事务 139
ACID特性 144
练习题 145
第5章 复杂查询 147
5-1 视图 149
视图和表 149
创建视图的方法 151
视图的限制① ——定义视图时不能使用ORDER BY子句 154
视图的限制② ——对视图进行更新 155
删除视图 159
5-2 子查询 160
子查询和视图 160
子查询的名称 163
标量子查询 163
标量子查询的书写位置 166
使用标量子查询时的注意事项 167
5-3 关联子查询 168
普通的子查询和关联子查询的区别 168
关联子查询也是用来对集合进行切分的 171
结合条件一定要写在子查询中 172
练习题 173
第6章 函数、谓词、CASE表达式 175
6-1 各种各样的函数 177
函数的种类 177
算术函数 178
字符串函数 182
日期函数 190
转换函数 194
6-2 谓词 198
什么是谓词 198
LIKE谓词——字符串的部分一致查询 198
BETWEEN谓词——范围查询 202
IS?NULL、IS?NOT?NULL——判断是否为NULL 203
IN谓词——OR的简便用法 204
使用子查询作为IN谓词的参数 205
EXIST谓词 210
6-3 CASE表达式 214
什么是CASE表达式 214
CASE表达式的语法 214
CASE表达式的使用方法 215
练习题 221
第7章 集合运算 223
7-1 表的加减法 225
什么是集合运算 225
表的加法——UNION 225
集合运算的注意事项 228
包含重复行的集合运算——ALL选项 229
选取表中公共部分——INTERSECT 230
记录的减法——EXCEPT 231
7-2 联结(以列为单位对表进行联结) 234
什么是联结 234
内联结——INNER JOIN 235
外联结——OUTER JOIN 240
3张以上的表的联结 243
交叉联结——CROSS?JOIN 246
联结的特定语法和过时语法 249
练习题 254
第8章 SQL高级处理 255
8-1 窗口函数 257
什么是窗口函数 257
窗口函数的语法 258
语法的基本使用方法——使用RANK函数 258
无需指定PARTITION BY 261
专用窗口函数的种类 262
窗口函数的适用范围 263
作为窗口函数使用的聚合函数 264
计算移动平均 266
两个ORDER?BY 269
8-2 GROUPING运算符 271
同时得到合计行 271
ROLLUP——同时得出合计和小计 272
GROUPING函数——让NULL更加容易分辨 277
CUBE——用数据来搭积木 279
GROUPING SETS——取得期望的积木 281
练习题 282
第9章 通过应用程序连接数据库 283
9-1 数据库世界和应用程序世界的连接 285
数据库和应用程序之间的关系 285
驱动——两个世界之间的桥梁 286
驱动的种类 287
9-2 Java基础知识 289
第一个程序Hello,World 289
编译和程序执行 291
常见错误 294
9-3 通过Java连接PostgreSQL 298
执行SQL语句的Java程序 298
Java是如何从数据库中获取数据的呢 299
执行连接数据库的程序 301
选取表中的数据 302
更新表中的数据 305
小结 307
练习题 307
附录 练习题答案 308
· · · · · · (收起)
读后感
书名不坑爹,属于0基础入门书。 比起经典的SQL必知必会,行文稍显罗嗦(前者则不需要的一概不说),但不过分。如果准备从本书开始系统学习SQL,还是很好的。 本书值得称道的地方是,基于标准SQL 2003编写,但又给出不同数据库系统的代码差异,方便入门者(学标准SQL),或特...
6.2 exist谓词 7.1 intersect 公共部分 except 记录的减法 7.2 交叉联结 8 rank() / dense_rank() / row_number() over (partition by ** order by **) sum(**) over( ** ) ave(**) over(order by ** rows between 1 preceding and 1 following)
用户评价
我一直认为,学习任何一项技能,最重要的就是要有一个良好的开端。《SQL基础教程》正是给了我这样一个极其宝贵的开端。作为一名对技术充满好奇但又缺乏系统性知识的学习者,我曾经尝试过一些在线资源,但往往因为内容碎片化或者跳跃性太强而难以深入。这本书则完全不同,它的结构设计得非常合理,从最基础的数据库概念、SQL语言的起源和发展,到核心的查询语句(SELECT、INSERT、UPDATE、DELETE),再到更复杂的子查询、函数、视图、索引等等,都是一步一个脚印地进行讲解。我尤其欣赏作者在讲解每一个新概念时,都会先用通俗易懂的比喻或者贴近生活的例子来引入,然后再深入到具体的语法和操作。比如,在讲到“WHERE”子句的时候,作者用了“就像在商店里挑选商品,你要告诉店员你想要的颜色、尺寸和品牌”这样的比喻,让我立刻就明白了它的作用。书中的代码示例也做得非常出色,每一个例子都经过精心设计,能够清晰地展示某个SQL语句的功能,并且附带了详细的解释,告诉我为什么这么写,以及这段代码会产生什么样的结果。我常常会把书中的例子直接复制到数据库中运行,然后观察输出,这种亲手实践的过程,让我对SQL的理解更加深刻和牢固。这本书没有让我觉得自己在死记硬背语法,而是让我真正理解了SQL是如何工作的,以及如何用它来解决实际问题,这对我来说,是学习过程中最重要的收获。
在我接触《SQL基础教程》之前,我对数据库的印象就是一个庞大而复杂的系统,感觉是程序员才能触及的领域。我之所以选择这本书,是因为它承诺的是“基础”,对我这样一个完全的门外汉来说,这正是最需要的。我一直认为,学习一门技术,最重要的是建立起正确的思维方式和方法论。《SQL基础教程》在这方面做得非常出色。作者并没有直接灌输各种SQL的语法,而是先从数据库是如何组织和存储数据的角度来讲解,让我理解了“表”、“行”、“列”这些基本概念的由来,以及它们在实际应用中的意义。然后,他才开始介绍SQL语言,并且将每一个SQL命令都拆解得非常细致。我记得学习SELECT语句的各种过滤条件时,作者用了非常形象的比喻,比如“就像你在一个巨大的图书馆里寻找特定的书籍,你需要指定作者、书名、出版社等信息”。然后,书中提供了大量的示例代码,每一个示例都经过精心设计,能够直观地展示SQL语句的功能,并且附带了详细的解释,说明了为什么这么写,以及预期的输出结果是什么。我常常会把书中的例子复制到数据库中运行,然后观察输出,这种即时反馈让我觉得我不是在孤军奋战,而是在和数据库进行有效的沟通。这本书让我明白了,SQL并非是高深莫测的,而是可以通过逻辑和实践来掌握的。它为我打开了通往数据世界的大门,让我对未来的学习充满了信心。
作为一名初次接触数据库的爱好者,《SQL基础教程》这本书对我来说,就像是一本指引迷途的灯塔。我之所以选择它,是因为它承诺了“基础”,这对我这个对技术一无所知的人来说,是最大的吸引力。这本书的讲解方式非常吸引人,作者善于将复杂的概念用简单易懂的语言来阐述。我印象最深刻的是,在讲解SQL的“插入”和“更新”语句时,作者用了“往一个空篮子里放球”和“给篮子里的球换颜色”这样形象的比喻,让我一下子就理解了这些操作的本质。而且,书中提供了大量的代码示例,每一个示例都配有详细的说明,告诉我这个SQL语句的作用是什么,以及它会在数据库中产生什么样的变化。我常常会把书中的示例代码复制到数据库中进行运行,并且仔细观察输出结果。这种“纸上得来终觉浅,绝知此事要躬行”的学习方式,让我对SQL的理解越来越深刻。本书也让我认识到,SQL不仅仅是一门查询语言,更是一种处理数据的思维方式。它教会了我如何去思考数据之间的关系,如何去构建有效的查询来获取我想要的信息。总而言之,《SQL基础教程》为我打开了数据世界的大门,让我觉得学习SQL是一件充满乐趣和成就感的事情。
在我拿到《SQL基础教程》之前,我对SQL的理解,就像看到一本用古老文字写成的天书,完全不知道从何下手。我之所以选择这本书,很大程度上是因为它的书名非常直白,“基础”二字,给了我这个门外汉莫大的信心。这本书最打动我的地方,在于它并非直接堆砌复杂的SQL语句,而是从数据库的底层逻辑开始讲解。作者用非常生动形象的比喻,比如“就像我们整理衣柜,需要把衣服分类、叠好”,来解释数据库是如何组织和存储数据的。然后,他才逐步引入SQL语言,并且对每一个SQL命令都进行了非常细致的剖析。我记得学习SELECT语句的各种组合,比如如何在一个查询中同时使用WHERE、ORDER BY和LIMIT,作者都一一给出了清晰的示例,并且解释了这些子句的执行顺序,让我明白了一个查询是如何一步步生成结果的。而且,书中提供的练习题也非常有针对性,能够有效地巩固我所学到的知识。我常常会花很多时间去琢磨这些练习题,尝试不同的方法来完成,在这个过程中,我对SQL的理解也越来越深入。这本书不仅仅是教授我SQL的语法,更重要的是,它教会了我如何用SQL的思维去分析问题,如何从数据的角度去思考解决方案。它让我觉得,学习SQL不再是一件枯燥的事情,而是一场充满探索和发现的精彩旅程。
我曾经对SQL的理解非常模糊,只知道它和数据库有关,但具体怎么用,用在哪里,我完全不清楚。在朋友的推荐下,我入手了《SQL基础教程》,这本书的到来,彻底改变了我对SQL的认知。最让我印象深刻的是,这本书的讲解方式非常接地气,作者善于用生活中的例子来比喻抽象的概念,让我在学习过程中不会感到枯燥乏味。比如,在讲解JOIN操作时,作者用了一个非常贴切的例子,将“学生表”和“课程表”进行关联,清晰地展示了如何通过学生ID将两个表中的信息连接起来,获取每个学生选修了哪些课程的信息。他还细致地讲解了INNER JOIN、LEFT JOIN、RIGHT JOIN等不同连接方式的区别和适用场景,并且都配上了详细的代码示例和图示,这让我这个视觉型学习者来说,简直是如沐春风。我一遍遍地跟着书中的例子敲代码,观察输出结果,这种“知其然,更知其所以然”的学习过程,让我对SQL的理解越来越深刻。而且,书中对每一个SQL关键字的解释都非常到位,就像在拆解一个精密的机械装置,让我清楚地知道每个零件的功能和作用,以及它们如何协同工作。这本书不仅让我掌握了SQL的基本语法,更重要的是,它培养了我用SQL思维来分析和解决问题的能力。它让我觉得,学习SQL不再是一件难事,而是一个充满乐趣和挑战的旅程。
我曾经对SQL的印象是“高大上”,总觉得它是程序员的专属技能,我这样的普通人是学不会的。直到我遇到了《SQL基础教程》,这本书彻底颠覆了我的认知。这本书最让我赞赏的地方,就是它的循序渐进,毫不跳跃。从最基础的数据库概念开始,就像是在搭建一座高楼,先是打好地基,然后一层层往上砌砖。我记得学习SELECT语句的时候,作者详细讲解了各种过滤条件,比如等于、大于、小于、不等于,以及如何使用AND和OR来组合这些条件。并且,每一个条件都配上了实际的SQL代码,让我可以亲手在数据库中进行尝试。我常常会把书中的例子照搬,然后去观察结果,如果结果不符合预期,我就会回头去查阅作者的解释,找出问题所在。这种反复的实践和反思,让我对SQL的掌握越来越扎实。而且,本书也介绍了一些进阶的概念,比如子查询、视图、索引等,但作者的讲解依然保持着清晰和易懂的风格,不会让我感到 overwhelming。它让我明白了,SQL并非是神秘莫测的,而是可以通过逻辑和实践来掌握的。它为我打开了数据处理的新世界,让我对未来如何利用数据解决问题充满了信心。
作为一名从零开始接触数据库的菜鸟,当初选择《SQL基础教程》纯粹是因为它那朴实无华的名字,感觉直击要害,不会被那些花哨的概念绕晕。拿到书的那一刻,我最大的期望就是它能像一位循循善诱的老师,一步步把我从“SQL是什么”的迷雾中引出来。翻开第一页,就看到了那些我从未见过的关键字,什么SELECT、FROM、WHERE,看起来像是一串串加密的咒语。但作者的讲解方式,却异常的清晰。他并没有直接扔出复杂的例子,而是从最基础的数据存储概念讲起,就像在搭建一栋房子,先打好地基,再一层一层往上垒。我印象最深刻的是关于“表”的介绍,作者用了生活中常见的例子,比如一个学生名单,详细地解释了表的结构、字段、数据类型,以及每一行数据代表的意义。这种由浅入深的讲解,让我这个完全没有概念的人,也能慢慢理解数据库并不是一个高高在上的技术,而是解决实际问题的工具。读到后面,关于SELECT语句的各种用法,比如过滤、排序、连接,作者都用大量的代码示例和图示来辅助说明,每一个小小的功能点,都解释得非常到位,让我觉得我真的在一点点掌握这个强大的查询语言。有时候,即使我对某个概念理解得不是特别透彻,但只要我跟着书中的例子敲一遍,看着输出的结果,那种豁然开朗的感觉,真的非常美妙。这本书就像一位耐心的向导,在我探索SQL世界的旅途中,一步步为我指明方向,让我觉得学习的过程充满了乐趣和成就感,而不是枯燥乏味的记忆。
我必须承认,在拿起《SQL基础教程》之前,我对SQL的认知几乎为零,甚至觉得它是一个只存在于程序员口中的神秘词汇。我之所以选择这本书,主要是因为它承诺了“基础”二字,这对我来说是至关重要的。我的学习方式偏向于实操,理论知识如果不能立刻落地,很容易就会被遗忘。这本书在这方面做得非常出色。从最简单的查询开始,作者就给出了清晰的代码片段,并且对每一个字段、每一个函数的作用都进行了详细的解释。我记得学习JOIN操作的时候,我曾感到非常困惑,不知道如何将不同表中的数据关联起来。但是,书中通过一个生动且贴切的例子,比如商品表和订单表,详细展示了INNER JOIN、LEFT JOIN、RIGHT JOIN的区别和应用场景。作者甚至画了一些图示来帮助理解,这对我这种视觉型学习者来说简直是福音。我反复阅读了这一章节,并且亲自实践了书中提供的所有JOIN示例,直到我能够根据不同的需求,准确地写出相应的JOIN语句。而且,书中提供的练习题也恰到好处,不会过于简单,也不会让人望而却步,能够有效地巩固我所学到的知识。我特别喜欢书中对于一些常见SQL问题的解答,例如如何优化查询效率,虽然篇幅不长,但却非常实用,让我开始思考如何写出更高效的SQL代码。总而言之,这本书为我打开了SQL的大门,让我觉得学习数据库不再是一件遥不可及的事情,而是可以通过努力和实践来掌握的技能。
我一直认为,学习一项新技能,最重要的是找到一本能够引你入胜的书。《SQL基础教程》无疑做到了这一点。在我接触这本书之前,我对数据库的了解仅限于“数据存储”这个模糊的概念,对SQL更是闻所未闻。这本书的语言风格非常平实,却又饱含力量,作者就像一位经验丰富的向导,在我迷茫的探索过程中,为我一一揭示SQL的奥秘。最让我感到受益匪浅的是,作者在讲解SQL语句时,不仅仅是列出语法,而是深入浅出地解释了每一条命令的逻辑和目的。例如,在讲解SELECT语句时,作者并没有止步于简单的字段选择,而是详细地介绍了如何使用WHERE子句进行条件过滤,如何使用ORDER BY子句进行排序,如何使用GROUP BY子句进行分组聚合,以及如何使用HAVING子句对分组后的结果进行过滤。这些讲解都配以大量的代码示例,而且每一个示例都经过精心设计,能够清晰地展示SQL语句的功能,并且附带了详细的解释。我经常会把书中的例子复制到数据库中进行实际操作,观察输出结果,这种实践出真知的学习方式,让我对SQL的理解更加深刻和牢固。这本书让我明白了SQL不仅仅是一堆冰冷的语法,更是解决实际问题、从海量数据中提取有价值信息的强大工具。它为我开启了数据分析的大门,让我觉得学习SQL是一件充满乐趣和成就感的事情。
我当初选择《SQL基础教程》纯粹是抱着“死马当活马医”的心态,因为我之前尝试过几次学习SQL,但总是浅尝辄止,感觉自己始终抓不住重点,学了也用不上。这本书给我最大的惊喜,就在于它能够将那些看似枯燥的SQL语法,变得生动有趣且易于理解。作者的语言风格非常亲切,仿佛是一位经验丰富的朋友在耐心地教你。他并没有一上来就抛出各种复杂的查询语句,而是从数据库最基本的概念——“数据”和“存储”开始讲起,然后循序渐进地介绍表格、字段、数据类型这些基本构成要素。我尤其喜欢他对SQL命令的讲解方式,他会把每一个命令拆解开来,解释每一个关键词的作用,并且用大量的实例来演示。例如,在讲到`UPDATE`语句时,他会详细解释`SET`后面跟的是要修改的字段和新值,`WHERE`后面是限定修改的条件,如果`WHERE`条件不加,那就意味着要修改所有符合条件的记录,甚至是所有记录,这一点非常重要,也十分危险,作者会用加粗或者其他醒目的方式强调这些注意事项。此外,书中还包含了一些非常实用的技巧,比如如何编写更清晰的SQL语句,如何避免常见的错误等等。这些内容对于初学者来说,真的是非常宝贵的财富。我按照书中的步骤一步步学习,跟着每一个例子敲代码,然后去观察数据库的变化,这种互动式的学习方式,让我觉得我在真正地掌握一门技能,而不是在被动地接受信息。
写了很多新手常见误区。SQL还是实践科学,必须多写才有感觉。
清晰易懂!
书本身做的还是非常认真的,适合基础入门,配合sqlzoo的习题做一下。
适合入门,讲解细致,但感觉核心知识点比较少,需要扩充广度和深度的话还得看对应的DBMS的用户手册或者更高阶的书籍。 日本人写的这一系列的书都是通俗易懂简明扼要,基本上都很适合大概了解和入门,相比国内的书太友好了。
细致,易懂