如果要推荐一本学习SQL的书籍,我会首推《SQL基础教程(第2版)》,这本书很适合零经验的初学者用于自学SQL,讲解得比较通俗易懂。
作者MICK,是日本资深数据库工程师,致力于商业智能和数据仓库的开发。
书中介绍了关系数据库和用来操作关系数据库的SQL语言的使用方法,以及通过丰富的图示、大量示例程序和详实的操作步骤说明,让你循序渐进地掌握SQL的基础知识和使用技巧。
而且,每章结尾都有练习题,可以检验对各章内容的理解程度,还把重要知识点总结成了“法则”,让你更容易掌握重点。
需要的也可以自己去看书:
【下面是我看完这本书的总结】
学习前先安装MySQL数据库和navicat客户端。
MySQL数据库用于存放数据,客户端navicat是为了方便操作数据库而设计的一种图形化软件。
只要电脑上安装了客户端,在任何地方打开电脑,都可以使用客户端连接到MySQL数据库。
安装教程可看:
结缔:如何安装MySQL数据库和navicat客户端?zhuanlan.zhihu.com一、数据库和SQL
1.数据库是什么
● 数据库,是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。
● 用来管理数据库的计算机系统,称为数据库管理系统(DBMS)。
● 通过使用DBMS,多个用户便可安全、简单地操作大量数据。
● 关系数据库通过关系数据库管理系统(RDBMS)进行管理。
2.数据库的结构
● RDBMS通常使用客户端/服务器这样的系统结构。
● 通过从客户端向服务器端发送SQL语句来实现数据库的读写操作。
● 关系数据库,采用被称为数据库表的二维表来管理数据。
● 数据库表,由表示数据项目的列(字段)和表示一条数据的行(记录)所组成,以记录为单位进行数据读写。
3.SQL概要
● SQL是为操作数据库而开发的语言。
● SQL通过一条语句来描述想要进行的操作,发送给RDBMS。
● 原则上SQL语句都会使用分号结尾。
● SQL根据操作目的可以分为DDL、DML和DCL。
4.表的创建
● 表通过CREATE TABLE语句创建而成。
● 指定列的数据类型(整数型、字符型和日期型等)。
● 可以在表中设置约束(主键约束和NOT NULL约束等)。
5.表的删除和更新
● 使用DROP TABLE语句来删除表。
● 使用ALTER TABLE语句向表中添加列或者从表中删除列。
SQL入门可看:
结缔:零基础快速学会SQL,先看这篇数据库入门学习指南zhuanlan.zhihu.com二、查询基础
1.SELECT语句基础
● 使用SELECT语句从表中选取数据。
● 为列设定显示用的别名。
● SELECT语句中可以使用常数或者表达式。
● 通过指定DISTINCT可以删除重复的行。
● SQL语句中可以使用注释。
● 可以通过WHERE语句从表中选取出符合查询条件的数据。
2.算术运算符
● 运算符,是对其两边的列或者值进行运算(计算或者比较大小等)的符号。
● 使用算术运算符可以进行四则运算。
● 括号可以提升运算的优先顺序(优先进行运算)。
● 包含NULL的运算,其结果也是NULL。
3.比较运算符
● 比较运算符可以用来判断列或者值是否相等,还可以用来比较大小。
● 判断是否为NULL,需要使用IS NULL或者IS NOT NULL运算符。
4.逻辑运算符
● 通过使用逻辑运算符,可以将多个查询条件进行组合。
● 通过NOT运算符可以生成“不是~”这样的查询条件。
● 两边条件都成立时,使用AND运算符的查询条件才成立。
● 只要两边的条件中有一个成立,使用OR运算符的查询条件就可以成立。
SQL简单查询可看:
结缔:搞不懂这些查询语句,SQL简单查询也无法从入门到熟练zhuanlan.zhihu.com三、聚合与排序
1.对表进行聚合查询
● 使用聚合函数对表中的列进行计算合计值或者平均值等的汇总操作。
● 通常,聚合函数会对NULL以外的对象进行汇总。但是只有COUNT函数例外,使用COUNT(*)可以查出包含NULL在内的全部数据的行数。
● 使用DISTINCT关键字删除重复值。
2.对表进行分组
● 通过使用聚合函数和GROUP BY子句,可以将表分割后再进行汇总。
● 在GROUP BY子句中指定的列,称为聚合键或者分组列。
● 聚合键中包含NULL时,在结果中会以“不确定”行(空行)的形式表现出来。
● 使用聚合函数和GROUP BY子句时需要注意以下4点:
① 只能写在SELECT子句之中
② GROUP BY子句中不能使用SELECT子句中列的别名
③ GROUP BY子句的聚合结果是无序的
④ WHERE子句中不能使用聚合函数
3.为聚合结果指定条件
● 使用COUNT函数等对表中数据进行汇总操作时,为其指定条件的是HAVING子句。
● 聚合函数可以在SELECT子句、HAVING子句和ORDER BY子句中使用。
● HAVING子句要写在GROUP BY子句之后。
● WHERE子句用来指定数据行的条件,HAVING子句用来指定分组的条件。
4.对查询结果进行排序
● 使用ORDER BY子句对查询结果进行排序。
● 在ORDER BY子句中列名的后面使用关键字ASC可以进行升序排序,使用DESC关键字可以进行降序排序。
● ORDER BY子句中书写的列名,称为排序键。ORDER BY子句中可以指定多个排序键。
● 排序健中包含NULL时,会在开头或末尾进行汇总。
● ORDER BY子句中可以使用SELECT子句中定义的列的别名。
● ORDER BY子句中可以使用SELECT子句中未出现的列或者聚合函数。
● ORDER BY子句中不能使用列的编号。列编号,是指SELECT子句中的列按照从左到右的顺序进行排列时所对应的编号(1, 2, 3, …)。
SQL汇总分析可看:
结缔:带你玩转SQL数据汇总分析,工作再忙都要看zhuanlan.zhihu.com四、数据更新
1.数据的插入(INSERT语句的使用方法)
● 使用INSERT语句可以向表中插入数据(行),INSERT语句每次执行一行数据的插入。
● 将列名和值用逗号隔开,分别括在()内,这种形式称为清单。
● 对表中所有列进行INSERT操作时可以省略表名后的列清单。
● 插入NULL时需要在VALUES子句的值清单中写入NULL。
● 可以为表中的列设定默认值(初始值),默认值可以通过在CREATE TABLE语句中为列设置DEFAULT约束来设定。
● 插入默认值可以通过两种方式实现,即在INSERT语句的VALUES子句中指定DEFAULT关键字(显式方法),或省略列清单(隐式方法)。
● 使用INSERT…SELECT可以从其他表中复制数据。
2.数据的删除(DELETE语句的使用方法)
● 如果想将整个表全部删除,可以使用DROP TABLE语句,如果只想删除表中全部数据,需使用DELETE语句。
● 如果想删除部分数据行,只需在WHERE子句中书写对象数据的条件即可。通过WHERE子句指定删除对象的DELETE语句,称为搜索型DELETE语句。
3.数据的更新(UPDATE语句的使用方法)
● 使用UPDATE语句可以更改(更新)表中的数据。
● 更新部分数据行时可以使用WHERE来指定更新对象的条件。通过WHERE子句指定更新对象的UPDATE语句,称为搜索型UPDATE语句。
● UPDATE语句可以将列的值更新为NULL。
● 同时更新多列时,可以在UPDATE语句的SET子句中,使用逗号分隔更新对象的多个列。
4.事务
● 事务,是需要在同一个处理单元中执行的一系列更新处理的集合。通过使用事务,可以对数据库中的数据更新处理的提交和取消进行管理。
● 事务处理的终止指令包括COMMIT(提交处理)和ROLLBACK(取消处理)两种。
● DBMS的事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)四种特性。通常将这四种特性的首字母结合起来,统称为ACID特性。
五、复杂查询
1.视图
● 从SQL的角度来看,视图和表是相同的,两者的区别在于表中保存的是实际的数据,而视图中保存的是SELECT语句(视图本身并不存储数据)。
● 使用视图,可以轻松完成跨多表查询数据等复杂操作。
● 可以将常用的SELECT语句做成视图来使用。
● 创建视图需要使用CREATE VIEW语句。
● 视图包含“不能使用ORDER BY”和“可对其进行有限制的更新”两项限制。
● 删除视图需要使用DROP VIEW语句。
2.子查询
●子查询,是一次性视图(SELECT语句)。与视图不同,子查询在SELECT语句执行完毕之后就会消失。
● 由于子查询需要命名,因此需要根据处理内容来指定恰当的名称。
● 标量子查询,是只能返回一行一列的子查询。
3.关联子查询
● 关联子查询会在细分的组内进行比较时使用。
● 关联子查询和GROUP BY子句一样,也可以对表中的数据进行切分。
● 关联子查询的结合条件如果未出现在子查询之中就会发生错误。
SQL复杂查询可看:
结缔:想不明白烧脑的关联子查询,如何能玩转SQL复杂查询?zhuanlan.zhihu.com六、函数、谓词、CASE表达式
1.各种各样的函数
● 根据用途,函数可以大致分为算术函数、字符串函数、日期函数、转换函数和聚合函数。
2.谓词
● 谓词,是返回值为真值的函数。
● 掌握LIKE的三种使用方法(前方一致、中间一致、后方一致)。
● 需要注意BETWEEN包含三个参数。
● 想要取得NULL数据时必须使用IS NULL。
● 可以将子查询作为IN和EXISTS的参数。
3.CASE表达式
● CASE表达式,分为简单CASE表达式和搜索CASE表达式两种。搜索CASE表达式包含简单CASE表达式的全部功能。
● 虽然CASE表达式中的ELSE子句可以省略,但为了让SQL语句更加容易理解,还是希望大家不要省略。
● CASE表达式中的END不能省略。
● 使用CASE表达式能够将SELECT语句的结果进行组合。
SQL多表查询可看:
结缔:一张图记住7种表的联结,帮助你秒懂SQL多表查询zhuanlan.zhihu.com七、集合运算
1.表的加减法
● 集合运算,是对满足同一规则的记录进行的加减等四则运算。
● 使用UNION(并集)、INTERSECT(交集)、EXCEPT(差集)等集合运算符来进行集合运算。
● 集合运算符可以去除重复行。
● 如果希望集合运算符保留重复行,就需要使用ALL选项。
2.联结(以列为单位对表进行联结)
● 联结(JOIN)就是将其他表中的列添加过来,进行“添加列”的集合运算。UNION是以行(纵向)为单位进行操作,而联结则是以列(横向)为单位进行的。
● 联结大体上分为内联结和外联结两种。首先请大家牢牢掌握这两种联结的使用方法。
● 请大家一定要使用标准SQL的语法格式来写联结运算。
八、SQL高级处理
1.窗口函数
● 窗口函数,可以进行排序、生成序列号等一般的聚合函数无法实现的高级操作。
● 理解PARTITION BY和ORDER BY这两个关键字的含义十分重要。
2.GROUPING运算符
● 只使用GROUP BY子句和聚合函数是无法同时得出小计和合计的。如果想要同时得到,可以使用GROUPING运算符。
SQL高级功能可看:
结缔:SQL高级功能之窗口函数,用来处理经典排名面试题,简直太好用了!zhuanlan.zhihu.com最后一句话,看书还不如把我写的中级专栏看完快,虽然书也得多翻。
中级数据分析项目zhuanlan.zhihu.com