10周入门数据分析丨零基础快速自学SQL,2天足矣

SQL全称是 Structured Query Language,翻译后就是结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

十周入门数据分析.jpg

至于 ORACLE、DB2、Sybase、SQLServer、MySQL、MS Access等都是数据库,虽然语法上有差异,但是基本上都是大同小异。作为一名数据从业者,虽然市面上有很多很智能很自助的数据工具,甚至有的拖拖拽拽就能实现,但作为一名报表工程师、数据分析师,不懂一点SQL是绝逼不行的。
之前很多文章对于SQL都一笔带过,轻描带写,略忽视这项基本技能的重要性,所以今天就来讲讲如何学习SQL。
市面上都大量的书籍和教学视频,这里就帮大家提炼核心要点,给个学习方向。
本次的文章主要从以下几个方面进行说明,大家可以参考着学习。

  • SQL快速学习路线
  • 数据库表基础操作
  • SQL基础语句
  • SQL高级语句

SQL快速学习路线

零基础自学SQL时通常会遇到2个坑:

一坑:学习之前先安装数据库软件,可以是SQL Sever,也可以是MySQL。对于新人而言,安装数据库软件挺费时间,坑太多。我刚上大学那会要求2天内自学SQL,结果我花了1天时间安装SQL Sever。前一篇文章分享了MySQL的安装教程,刚开始学用不上太庞杂的功能,所以推荐小而美的MySQL,SQL Sever也是可以的。

二坑:一上来就背SQL语法。我看过太多新人在那边吭哧吭哧做笔记背SQL,个人不赞成这种学法,不实践记不住。就和Excel函数一样,理解含义和如何使用,关键时候去w3school查询一下就行了,以后用得多了自然就掌握了。(文尾为大家准备了大量经典习题)

SQL学习路线

1、下载安装MySQL,或者安装软件phpstudy(这个软件自带了mysql数据库,而且安装启动方便)。
2、我这里用的是phpstudy,打开phpstudy后,点击下图中的启动,点击后数据库服务就会启动了。

phpstudy.png

3、下载安装Navicat软件
这个软件可以轻松连接数据库,我们可以在这个软件中练习学习SQL语法

4、使用Navicat建立数据库连接
点击文件——新建连接,连接名随便填写,比如我写的是“本地”。主机名、端口都不需要修改,用户名和密码都是root(因为我们安装的phpstudy里的mysql默认用户名密码就是root),点击连接测试显示为成功后点确定保存。
以后再次访问时,双击即可。

Navicat.png

5、下载习题进行学习,内含习题需要用到的数据表。
6、导入第5步中下载的数据表(sqltest1)。

下载地址(回复可见):

此处内容需要评论回复后

右击第4步中的“本地”,新建一个数据库test1,双击打开新建的数据库(打开后颜色是绿色)。
拖拽刚才下载的数据表文件(sqltest1.sql)到test1上面。

导入源数据.png

这时会出现上述弹窗,点击开始,等待导入完成后,点击关闭
在左侧空白处右击,选择“刷新”,即可看到刚才导入的数据表了。

查看数据表.png

7、打开sql语法编辑器

如下图点击查询——新建查询,在空白处输入sql语法,点击运行,如果输入错误会有报错,输入正确则会返回查询内容。

新建查询.png

8、边做边学
打开第一部分习题,边做边学,通过查询w3c的sql语法手册完成

9、巩固练习
尝试不看sql语法手册,独立完成第二部分习题。
以上是sql的学习路径,接下来是sql语句的学习,掌握使用场景和含义,具体语法就不做解释了,大家参考w3c的sql语法手册学习。这里我归了下类,挑重点讲。

数据库表基础操作

首先数据库表必掌握的基础操作,建表、删表、往表里增数据、往表里删数据以及最重要的取数等等。

1、CREATE TABLE(建表)
怎么着也得先建立表~

-- 创建数据表
CREATE TABLE emp
(
  id int NOT NULL PRIMARY KEY, /*添加主键*/
  name varchar(20),
  sex varchar(2),
  age int,
  grade int,
  money double
)

CREATE TABLE orders
(
  o_id int NOT NULLPRIMARY KEY,
  orderNo int,
  e_id int,
  FOREIGN KEY (e_id) PEFERENCES emp(id) /*添加一个外键*/
)

当你建表成功后,发现忘记添加主键,或者忘记添加外键,莫着急。使用以下咒语即可:

-- 添加主键
ALTER TABLE emp ADD PRIMARY KEY(id);
-- 添加外键
ALTER TABLE orders ADD FOREIGN KEY (e_id) PEFERENCES emp(id);

建好的表如下:

创建数据表.png
emp表

order数据表.png
orders表

2、INSERT(插入)

向表中插入数据

/*向emp表中插入数据,差一条为例
插入字符时使用'',插入数据值时不需要*/
INSERT INTO emp VALUES(1,'ace','nan',14,12,12,456);
...
-- 向orders表中插入数据,插一条为例
INSERT INTO orders VALUES(1,2323,11);

向emp插入数据.png
插入数据后的emp表

orders表插入数据.png
插入数据后的orders表

--向表中的某列插入数据
INSERT INTO table_name(列名1,列名2,...) VALUES ('值1','值2',...);

3、UPDATE(更新)

-- 更新某一行的某一列
UPDATE emp SET age=12 WHERE name='ace';
-- 更新某一行的若干列
UPDATE emp SET age='13',grade=34 WHERE name='ace';

4、DELETE(删除)

-- 删除表中的某一行
DELETE FROM emp WHERE id=8;
-- 删除表中的所有数据
DELETE * FROM emp;

在使用delete删除emp表中数据时,要注意该表与其他表是否存在关联关系,比如:外键。emp表id是表orders的外键,如果要删除emp表中的id,得先删除orders表中的外键。

5、DISTINCT(去重)
在表中,可能会包含重复值,这并不成问题。不过,有时你也许希望仅仅返回唯一不同的值。使用distinct关键字进行处理,用于返回唯一不同的值。
注意:distinct关键字是去重!去重!去重!*把列中的重复值去掉!
曾经我在笔试的时候,有道SQL考题:请写出表中所有重复的name的所有数据。我当时没反应过来,直接就用了distinct关键字,后来就....

-- 写出emp表中所有重复的name的数据
SELECT * FROM emp WHERE
name IN
(
  SELECT name FROM emp GROUP BY name
  HAVING COUNT(1)>=2  /*count(1)其实就是计算一共有多少符合条件的行,COUNT(*)会全表扫描*/
)
-- 查询emp表中的name,返回唯一的名字
SELECT DISTINCT name FROM emp;

6、Select(取数)

SELECT 语句用于从表中选取数据,结果被存储在一个结果表中(称为结果集)。这是以后最常用的操作,占据你90%。
SQL SELECT 语法:
SELECT 列名称 FROM 表名称

以及:
SELECT * FROM 表名称

比如需获取名为 "LastName" 和 "FirstName" 的列的内容(从名为 "Persons" 的数据库表),请使用类似这样的 SELECT 语句:
SELECT LastName,FirstName FROM Persons

SELECT通常结合其他函数和语法使用。

SQL基础语句

在实际的SQL使用中,肯定会涉及到有关函数的使用,这里简单介绍几种初学时必学的函数类型。

1、AVG()
AVG 函数返回数值列的平均值。NULL 值不包括在计算中。

-- 当求平均值的列包含null值时,null是不包括在计算中的
SELECT AVG(grade) AS avg_grade FROM emp;
-- 找出成绩高于平均惩治的name
SELECT name FROM emp WHERE
grade >(SELECT AVG(grade) AS avg_grade FROM emp);

2、COUNT()
COUNT( ) 函数用于返回匹配指定条件的行数。

-- 语法:COUNT(字段名)
-- 返回指定列的值的数目,NULL值不算
SELECT COUNT(grade) FROM emp;
-- COUNT(*)返回表中的记录数
SELECT COUNT(*) FROM emp;

3、MAX()

MAX函数返回指定列的最大值,NULL值不包括在计算中

-- MAX(字段名),查找最高的成绩
SELECT MAX(grade) FROM emp;

4、MIN()

MIN函数返回的指定列的最小值,NULL值不包括在计算中

-- MIN(字段名),查找最小的年龄
SELECT MIN(age) FROM emp;

5、SUM()
SUM函数返回指定列的总数

-- SUM(字段名),返回指定列的总数,计算所有成绩的总和
SELECT SUM(grade) AS sum FROM emp;

6、ROUND()

ROUND 函数用于把数值字段舍入为指定的小数位数

/*ROUND(),把数值字段舍入为指定的小数位
语法:SELECT ROUND(字段名,返回的小数位数) FROM 表名*/
-- 将money小数点保留1位
SELECT name,ROUND(money,1) AS money FROM emp;

7、FORMAT()

FORMAT 函数用于对字段的显示进行格式化

-- FORMAT(),对字段的显示进行格式化
SELECT FORMAT(字段名,规定格式) FROM 表名;

SQL高级语句

这一部分的内容是通常用到的,属于最开始学习SQL知识时必须要熟练的,我这里大致列出几项。

1、LIMIT

-- LIMIT限制限制的数据条数
SELECT * FROM emp LIMIT 4; /*只显示前4行的数据*/

2、LIKE
一般配合where使用,搜索条件中的指定模式

/* LIKE 查询关键词数据
%可以理解为定义通配符 */
SELECT * FROM emp WHERE name LIKE 'a%';       -- 查询emp表中,name字段中前面包含a的名字
SELECT * FROM emp WHERE name LIKE '%a';       -- 查询emp表中,name字段中后面包含a的名字
SELECT * FROM emp WHERE name LIKE '%a%';      -- 查询emp表中,name字段中中间包含a的名字
SELECT * FROM emp WHERE name NOT LIKE 'a%';   -- 查询emp表中,name字段中前面不包含a的名字

在上面我们可以看到,通配符“%”的使用方法,所以通配符必须要配合like 运算符一块使用。

通配符还有以下几种:

/*通配符的使用*/
SELECT * FROM emp WHERE name LIKE 'a_';      -- 使用“_”通配符
SELECT * FROM emp WHERE name LIKE '[ac]%';   -- 使用“[charlist]”通配符
SELECT * FROM emp WHERE name LIKE '[!ac]%';   -- 使用“[!charlist]”通配符

3、IN

从字面意思就可以知道它的作用是什么了

--IN,找出名字为'demo'和'ace'的所有数据
SELECT * FROM emp WHERE name IN ('demo','ace');

4、JOIN

联表运算符JOIN,该运算符是用于将两个或者两个以上的表进行关联,并从这些表中查询数据。
对于联表来说,通过使用主键(primary key)和外键(foreign key)也可以建立连接。

--IN,找出名字为'demo'和'ace'的所有数据
SELECT * FROM emp WHERE name IN ('demo','ace');

除了上述直接使用条件关联,下面我们可以用可读性更高的INNER JOIN来写

-- INNER JOIN的使用和JOIN的效果一样,以INNER JOIN为例
SELECT e.name
       ,e.age
       ,o.orderNo
FROM emp e
INNER JOIN order o
ON e.id=o.e_id
ORDER BY name;

还有其他几种方连接方式(外连接):

  • LEFT JOIN:就算右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表没有匹配,也行右表返回所有的行
  • FULL JOIN:只要有一个表存在着匹配,就返回行

5、ALTER
穿插介绍一下alter,前面的例子中已经包含了几种alter使用方法。

-- ALTER修改表中某列值
ALTER TABLE emp
ALTER TABLE age int;
-- 给表中增加列
ALTER TABLE emp ADD COLUMN money DOUBLE;

6、UNION

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

上面引用的意思就是:道不同,不相为谋!
UNION和UNION ALL命令几乎是等效的,不过加了“ALL”,就会列出所有的值。

-- UNION,合并查询的结果集
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name1

-- UNION ALL,合并查询的结果集,列出所有值
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name1

注意:因为其也具有“唯一性”,容易和PRIMARY KEY混淆。面试或笔试常考两者的不同,在这里说明一下:
与PRIMARY KEY不同的是,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
为表添加UNION,这里给出使用的SQL语法。

-- 为已创建的表添加UNION
ALTER TABLE table_name ADD UNIQUE(column_name);
-- 定义多个UNION约束
ALTER TABLE Persons
ADD CONSTRAINT u_name(约束名) UNIQUE(column_name1,column_name2,...);

-- 通过约束名来撤销
ALTER TABLE Persons
DROP INDEX u_name;

7、AUTO-INCREMENT(自增)

在运用中,我们希望在每添加一条数据后,自动的为我们的主键创建值。

-- AUTO-INCREMENT自增
CREATE table emp(
  id int not null AUTO-INCREMENT,
  ...
  primary key(id)
);
/*
想改变自增的起始值,使用下列SQL:
ALTER TABLE emp AUTO-INCREMENT=100;
*/

8、ORDER BY

在前面中已经使用到了有关order by的SQL语句,order by该语句用于对结果集进行排序,默认是进行ASC正序排序(从小到大)。
排序的两种方式:

  • ASC:升序(从小到大)
  • DESC:降序(从大到小)

举栗:

/*ASC,升序(从小到大);DESC降序(从大到小)
对emp表中的name进行ASC排序查询*/
SELECT * FROM emp ORDER BY name;

ASC排序.png
ASC排序

对于DESC排序,这里就不进行举例了,大家可以自己写SQL试一下。

9、GROUP BY
通常配合合计函数使用,根据一个或多个列对结果集进行分组。

-- 文章前面的一个SQL语句,查询表中重复的数据
SELECT * FROM emp WHERE name IN(
  SELECT name FROM emp GROUP BY name HAVING COUNT(1)>=2
);

具体的用法在介绍函数时会涉及到。

10、HAVING
在上面的例子中,我们使用where关键字来增加查询条件,这里增加having字句是因为,where关键字无法与合计函数一起使用
同样引用上面的SQL语句。
具体的用法在介绍函数时会涉及到。

11、DEFAULT
DEFAULT约束用于向列中插入默认值。

-- 在建表时可以设置默认值
CREATE TABLE hello
  (
    id int null primary key,
    ...
    name varchar(255) default 'zhangsan'
  );

本次文章中写的相关知识点是我以前在学习中随手记录的,对一些SQL大牛来说,这些已经是耳熟能详了。

相关资源

下载地址(回复可见):

此处内容需要评论回复后

专题文章

10周入门数据分析丨学习计划及大纲

> “我是文科生出身,可以学习数据分析吗?” > “我没有编程基础,可以成为数据分析师吗?” > “学习数据分析必须学习R和Python吗?” > …… 其实,数据分析没有想象中那么难,入....


10周入门数据分析丨如何炼就数据分析的思维?

面对数据异常,我们经常会出现“好像是A原因引起的?”“貌似和B原因也相关?”“有可能是C操作不当”的主观臆测。 或者,拿到一个分析议题,分析“11月销售数据下降的原因”,是先从产品层面,还是渠道层面....


10周入门数据分析丨数据分析惯用的5种思维方法

![十周入门数据分析.jpg][1] 在数据分析中,数据分析思维是框架式的指引,实际分析问题时还是需要很多“技巧工具”的。就好比中学里你要解一元二次方式,可以用公式法、配方法、直接开平方法、因式....


10周入门数据分析丨数据分析必备的43个Excel函数

Excel是我们工作中经常使用的一种工具,对于数据分析来说,这也是处理数据最基础的工具。很多传统行业的数据分析师甚至只要掌握Excel和SQL即可。 ![十周入门数据分析.jpg][1] ....


10周入门数据分析丨实操:如何用Excel做一次数据分析

前一篇分享了《[Excel数据分析必掌握的43个公式][1]》,今天这篇讲实操,教大家用Excel做一次简单的分析。一是让大家了解数据分析是一个怎样的流程;其次熟练Excel的操作(学的知识要用起来)....


10周入门数据分析丨写给新人的数据库入门指南

经常有刚从事数据分析的职场萌新,问我做数据分析工作要学些什么,应该怎样规划学习路径。我会告诉他:如果你Excel还用的不溜的话,就先学学Excel,当你用Excel处理和分析一些小数据集没有问题的时候....


10周入门数据分析丨零基础快速自学SQL,2天足矣

SQL全称是 Structured Query Language,翻译后就是结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 ![十周入门数据分析....

-- 展开阅读全文 --
对比Excel,轻松学习Python数据分析epub高清电子书
« 上一篇 03-07
数据分析实战丨利用python进行「野蛮时代」游戏数据分析过程
下一篇 » 03-08

发表评论

仅有一条评论

  1. arnoldLv.1 说道:

    666