数据分析师基本技能——SQL

我们做数据分析工作时,多数数据来源于数据库,SQL非常方便我们访问和查询数据库。

SQL 作为数据分析师的基本技能,那么需要掌握哪些SQL核心技能

  1. 理解数据库
  2. SQL基础重点知识:查询,更新,提取,插入,删除等数据操作
  3. 典型实例sql

1.理解数据库

数据库基本定义:

数据库(Database)基本含义为:存储数据的地方,确切地来说是一张张表格,每张表通过一定联系链接在一起,最后组成了数据库

可以简单的理解为:数据库中最基本的元素为表(table),每个表都有一个身份标识(像我们的身份证,来证明我们是谁)专业名称叫主键,每张表只有一个主键,它具有唯一性,table的中包含列和行,列为名称标签,行为记录具体数据。

在数据库中,如何关联其他表,一般会以「表名_ID」作为联接,通过JOIN 进行操作链接

选取主流数据库

市场上主流的数据有MySQL、Oracle、SQL Server等,而MySQL 是一个开源的关系型的数据库管理系统,应用非常广泛,因而选择使用Mysql学习sql是个不错的选择。

mysql的安装与配置非常简单,我们从官网下载社区版本安装,windows用户可以选择安装MSI安装(Windows Installer),一直默认安装,到了数据库用户和密码设置时,设置即可。

选取MySQL的GUI工具

windows用户选择Navicat第三方工具,来连接mysql,连接好了我们就可以进行数据库操作了。

Navicat常用的快捷键

  • Ctrl+Q ------ 打开查询窗口
  • Ctrl+R ------ 运行查询窗口的sql语句
  • Ctrl+Shift+R ------ 只运行选中的sql语句
  • Ctrl+N ------ 打开一个新的查询窗口
  • Ctrl+W ------ 关闭一个查询窗口
  • Ctrl+/ ------ 注释sql语句
  • Ctrl+L ------ 删除一行
  • Ctrl+Shift +/ ------ 解除注释
  • F6 ------ 打开一个mysql命令行窗口
  • Ctrl+D ------ 表的数据显示显示页面切换到表的结构设计页面,但是在查询页面写sql时是复制当前行

Navicat基本操作实践

创建数据库,含有一个简单的数据表,并进行C(创建)U(更新)R(读取,查询)D(删除)操作数据表

创建数据库

CREATE DATABASE 数据库名称
CREATE DATABASE MINGZHI

打开数据库

USE 数据库名称
USE MINGZHI

查看数据数据库

#查看所有数据库
SHOW DATABASES
#查看当前打开的数据库
SELECT DATABASE()

删除数据库

DROP DATABASES 数据库名称
DROP DATABASES MINGZHI

在数据库中创建数据表,根据具体数据类型,选择相应数据长度

CREATE TABLE tb1(ID INT(20) NOT NULL,姓名 varchar(20),性别 varchar(5))
#查看数据表
SHOW TABLES FROM MINGZHI
#查看数据表结构
SHOW COLUMNS FROM MINGZHI

向数据表中写入记录

INSERT 表名称 (列1, 列2,...) VALUES (值1, 值2,....)
INSERT tb1(ID, 姓名, 性别) VALUES(1,'张三', '男');
INSERT tb1(ID, 姓名, 性别) VALUES(2,'李四', '女');
INSERT tb1(ID, 姓名, 性别) VALUES(3,'王五', '男');
INSERT tb1(ID, 姓名, 性别) VALUES(4,'赵六', '女');

删除记录的数据

DELETE FROM 表名 WHERE 列名称 = 某值
DELETE FROM tb1 WHERE 姓名 = '赵六' 

更新记录的数据

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
UPDATE persons SET 性别 = '男' WHERE 姓名 ='赵六'
ALTER TABLE 语句用于在已有的表中添加、修改或删除列

2.SQL基础重点知识

通过2周的学习,先谈谈我的学习感受,sql语句学习相对比较简单,上手蛮快的,最核心思路就是,掌握基础知识,理清逻辑思路。

比如理清sql语句的执行顺序:

select---from---where---groupby---having---orderby


一、对基础重点知识梳理如下

一些关键字含义梳理

  • select.....from
  • where
  • group by --having
  • order by
  • like
  • distinct
  • 常用函数:sum,count, max, min,avg
  • case when then else end


select :选取数据,查看数据,指定返回的列 from: 需要从哪个数据表选取数据

select 列名称 from 表名称
select * from 表名称 #获取所有列

where : 设置条件筛选数据

WHERE 列 运算符 值

需要理解筛选的条件,合理利用运算符获取数据

group by:对指定的字段进行分组,产生汇总信息,一般结合sum,count函数使用。

select 字段1,字段2 from Table1  
GROUP BY 字段1,字段2

group by 使用中需要注意的问题

1,注意返回结果集的字段,,这些字段要么要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中

例如将上面代码改成如下,就是错误的,会报错:字段2没有包含在group by 中,因为group by 根据字段1,将具有相同分组字段的记录归并成了一条记录,然而那些不存在于Group By语句后面作为分组依据的字段就有可能出现多个值,但是当前一种分组情况只有一条记录,一个数据格是无法放入多个数值的,所以这里就需要通过一定的处理将这些多值的列转化成单值
select 字段1,字段2 from Table1  
group by  字段1

2,where 搜索条件在进行group by 分组操作之前应用,不能使用聚合函数

3, having 搜索条件在进行分组操作之后应用,可以使用聚合函数

order by : 根据指定的列对结果集进行排序, 默认按照升序,降序用desc

ORDER BY 字段1,字段2

like:模糊搜索,用于在 WHERE 子句中搜索列中的指定模式,结合“%”通配符使用

where column_namelike pattern

还可以用正则表达式来进行搜寻,REGEXP pattern(后续研究正则再详细减少)

distinct: 去重字段,需注意,只能放在select 语句首字段中

SELECT DISTINCT 列名称 FROM 表名称

sum:返回数值列的总数、 avg: 返回列的平均值、 count()返回表中的记录数

max():返回最大值、 min():返回最小值


二、联接查询

  • 内联接
  • 外联接

内联接

多表内联接:将多张表连接在一起,只列出匹配的记录

FROM  表1 [INNER] JOIN 表2 ON〈联接条件〉

自连接(特殊的内接): 将一张表,在逻辑上分为两张表,每张表取不同的别名来区别

FROM  表1 表名1 [INNER] JOIN 表1 表名2 ON〈联接条件〉

外联接

包括,左、右连接,返回所有的行

FROM  表1 LEFT JOIN 表2 ON〈连接条件〉

如何理解JOIN,看这张图就够了,这张表非常清晰的阐述了JOIN的用法,

  • 内联接 inner Join,找出两张表共有的字段;
  • 左联接 left join,以 join 前面一张表为主,返回其所有行,如果与右表有相同的字段,全部返回,否则为空,右联接刚好与之相反。
  • 全连接 Full join, 两张表全部返回

三、子查询

说白了就是嵌套查询,包含在某个查询中,如果子查询依赖于外部条件,则被称为相关子查询;

反之为非相关子查询

将外部查询的数据,放到内层子查询中做条件验证,根据验证结果(TRUE 或 FALSE)来决定外部查询的数据结果是否得以保留

举例:三张表,一张表student包含姓名sname,学号sno;一张表为course包含,课程编号cno,具体课程cname;一张表为score包含,学号sno,课程编号cno,和成绩score,

查询所有参加选修课程的同学的名字

select sname  
from student st 
where not exists  
(  select sno  from course co where not exists  (  select sno  from score sc  where sc.cno = co.cno and sc.sno = st.sno )

代码实现逻辑:

先取一条student记录,进入中层,再取一条course的记录,进入内层,此时student的记录和course的记录,作为内层判断的条件,在内层进行判断,结果返回真,则内层的NOT EXISTS为假, 然后继续对course表中的下一条记录进行判断,返现NOT EXISTS的值也为假,直到遍历完course表中的所有的数据,内层的NOT EXISTS的值一直都是假,所以中间层的WHERE语句的值也一直都是假。因为中间层一直为假,返回NOT EXISTS的值为真,结果就出现在结果集中,然后继续对student表中的下一条记录进行判断,直达student表中的所有数据都遍历完毕

参考与该篇文章

SQL 子查询 EXISTS 和 NOT EXISTSblog.csdn.net

3.典型实例sql

1、查询每个部门最高工资员工(题源来自LeetCode)

实现逻辑:首先在Employee表查询,找到部门最高工资,然后联接Department表,与其部门对应起来

代码如下:

select d.name as Department, e.name as Employee, e.Salary as Salary
from Employee e join Department d On e.DepartmentId = d.id
where (e.DepartemtId,e.Salary) in (select department,max(Salary)from Employee group by DepartementID)

主要语法有 inner join,max(), in, group by

2、查询员工第n高的工资(题源来自LeetCode)

实现逻辑:受启发于找第2高的工资,假如我们要找第2高的工资,那么就存在一个最大值(第一高),排除最大的,在其余的值中寻找最大的。以此类推,找到第N高的工资也就不难了

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGINRETURN (select max(Salary) from Employee ewhere N - 1 =(select count(distinct(e.Salary)) FROM Employee e2where e2.Salary > e1.Salary));
END

主要语法有 max(),count(),distinct()

3、查询2013年10月1日 至 2013年10月3日 期间非禁止用户的取消率(题源来自LeetCode)

实现逻辑:首先要理解取消率,status状态一栏中,canceled次数占总的比率,我们可以通过sum(case when status like 'cancel%' then 1 else 0 end) 获得次数,从而得到比率,在设置

日期条件和非禁止条件就可以实现了

select t.Request_at as Day, Round(sum(case when t.status like 'cancel%' then 1 else 0 end)/count(*), 2) as 'Cancellation Rate' 
from Trips as t join Users as u 
on t.Client_id = u.Users_Id and u.Banned = 'No'
where t.Request_at between '2013-10-01' and '2013-10-03' group by t.Request_at

主要语法有 round()保留两位, sum()求和, case..when..then..else..end 改变记录值,count(*)统计总数, join联接表,group by按日期分组, between and 区间筛选。

编辑于 2018-04-14

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 基于置信度的知识图谱表示学习框架

本文转载自公众号:PaperWeekly。作者丨谢若冰单位丨腾讯微信搜索应用部研究方向丨知识表示学习知识图谱被广泛地用来描述世界上的实体和实体之间的关系,一般使用三元组(h,r,t)(head entity, relation, trail entity&am…

史上最强Java架构师的13大技术能力讲解! | 附架构师能力图谱

从程序员进阶成为架构师,并非一蹴而就,需要系统化、阶段性地学习,在实战项目中融会贯通,这如同打怪通关,我们得一关一关突破,每攻破一个关口,就能得到更精良的装备,技能值也随之不断…

写给运营同学和初学者的SQL入门教程

作者简介 多肉,饿了么资深python工程师。曾在17年担任饿了么即时配送众包系统的研发经理,这篇文章最早的版本就诞生于那段时间,目前负责配送相关业务系统的整体稳定性建设。个人比较喜欢c和python,最近有点迷rust,同时…

强化学习,路在何方?

▌一、深度强化学习的泡沫 2015年,DeepMind的Volodymyr Mnih等研究员在《自然》杂志上发表论文Human-level control through deep reinforcement learning[1],该论文提出了一个结合深度学习(DL)技术和强化学习(RL&…

论文浅尝 | 基于神经网络的实体识别和关系抽取联合学习

本文转载自公众号:PaperWeekly。作者丨罗凌学校丨大连理工大学博士生研究方向丨深度学习,文本分类,实体识别联合学习(Joint learning)一词并不是一个最近才出现的术语,在自然语言处理领域,很早就…

一篇文章搞懂架构师的核心技能

“ 这是架构师系列的第一篇:核心技能,希望这个系列能完全揭示架构师这个职位:我先从核心技能开始,后续还有架构师之路,架构实战等架构师系列文章。 本文作者 陈睿 优知学院创始人,前携程定制旅游CTO,在互联…

史上最全的分词算法与工具介绍

分词(word tokenization),也叫切词,即通过某种方式将句子中的各个词语识别并分离开来,使得文本从“字序列”的表示升级为“词序列”表示。分词技术不仅仅适用于中文,对于英文、日文、韩文等语言也同样适用。…

论文解读:Attention is All you need

论文解读:Attention is All you need习翔宇​北京大学 软件工程博士在读​关注他192 人赞同了该文章Attention机制最早在视觉领域提出,2014年Google Mind发表了《Recurrent Models of Visual Attention》,使Attention机制流行起来,这篇论文采…

论文浅尝 | 基于神经网络的知识推理

本文转载自公众号:PaperWeekly。论文笔记来自 PaperWeekly 社区用户 britin。本文对基于 RNN 的从大规模知识库中进行推理进行了精度和可操作性的改善,提出的模型使用单个 RNN 就可以在多种 relation types 之间进行推理。如果你对本文工作感兴趣&#x…

手把手教你成为年薪60万的架构师

“ 这篇文章是帮助你成为架构师系列文章其中一篇,偏向0-5年工作的IT程序员员、架构师同学。 如果你能掌握这个系列提到的内容的70%左右,去阿里拿个P7问题不大,阿里的P7基本能拿到60W左右的年薪。 提醒一点,不要小看和不重视基础&a…

图解强化学习

小夕寄语 最近五年,是强化学习(Reinforcement Learning, RL)爆发的时期。RL是机器学习大家族中的一大类, 使用强化学习能够让机器学着如何在环境中拿到高分, 表现出优秀的成绩. 而这些成绩背后却是他所付出的辛苦劳动, 不断的试错, 不断地尝试…

领域应用 | 知识图谱数据构建的“硬骨头”,阿里工程师如何拿下?

本文转载自公众号:阿里技术。 阿里妹导读:搜索“西红柿”,你不但能知道它的营养功效、热量,还能顺带学会煲个牛腩、炒个鸡蛋!搜索引擎何时变成“暖男”了?原来背后…

阿里P8架构师谈:开源搜索引擎Lucene、Solr、Sphinx等优劣势比较

开源搜索引擎分类 1.Lucene系搜索引擎,java开发,包括: Lucene Solr Elasticsearch Katta、Compass等都是基于Lucene封装。 你可以想象Lucene系有多强大。 2.Sphinx搜素引擎,c开发,简单高性能。 以下重点介绍最常用的开源搜素引擎&#…

知识图谱(KG)中的同义词挖掘

前言 在语义搜索推荐、智能问答等场景中,随着通过各类方法挖掘得到知识数据越来越多,我们需要考虑一个新问题——新老知识合并加以整合?比如 “拉肚子” 与 “腹泻” 实则同一意义,但是因为在字面上差距较大,在各抽取任…

注册第一次练习

注册 使用微信注册练习使用Markdown编辑器 Markdown编辑器功能与语法支持 全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增加了 图片拖拽 功能&…

SQL 菜鸟教程

第一节:SQL 语法 数据库表 一个数据库通常包含一个或多个表。每个表有一个名字标识(例如:"Websites"),表包含带有数据的记录(行)。 在本教程中,我们在 MySQL 的 RUNOOB 数据库中创建了 Websit…

领域应用 | 深度学习在知识图谱构建中的应用

本文转载自公众号:阿里技术。深度学习模型介绍DeepDive系统在数据处理阶段很大程度上依赖于NLP工具,如果NLP的过程中存在错误,这些错误将会在后续的标注和学习步骤中被不断传播放大,影响最终的关系抽取效果。为了避免这种传播和影…

阿里P8架构师谈:Quartz调度框架详解、运用场景、与集群部署实践

以下将分别从Quartz架构简介、集群部署实践、Quartz监控、集群原理分析详解Quartz任务调度框架。 Quartz简介 Quartz是Java领域最著名的开源任务调度工具,是一个任务调度框架,通过触发器设置作业的定时运行规则,来执行定时任务。其中quartz集…

Bert在CV领域的应用

一只小狐狸带你解锁NLP/ML/DL秘籍老板老板,听说BERT是个瞎子此话怎讲?它能理解语言,但是理解不了小夕的自拍!video-BERT了解一下喵喵喵?AI的三大核心板块(CV/Speech/NLP)近几年都相继取得了非常…

CRISP-DM:数据挖掘标准流程

CRISP-DM:数据挖掘标准流程 框架 相关信息 https://blog.csdn.net/qq_36387683/article/details/82932680 https://blog.csdn.net/hadoopdevelop/article/details/79282832