专栏首页数据科学与人工智能【SQL技能】浅谈数据分析中的SQL

【SQL技能】浅谈数据分析中的SQL

很久没写东西了,正好群里有童鞋最近要换工作,提到有关数据库方面的问题,个人认为,做数据分析的并没有必要把数据库开发之类的弄懂,你只需要从相应的数据库中调用你需要的数据即可,至于数据库设计相关的安全事务,开发之类的问题那是数据库工程师的事情,而作数据分析的你了解SQL语言即可。当然,谁都不会嫌自己的知识多,掌握的东西越多对自己的发展当然也就越有利。

了解SQL的必要性

俗话说“巧妇难为无米之炊”,没有数据怎么分析。而SQL对于你来说就好比电脑的键盘鼠标,虽说没有了它也能照常运行,但对使用它的人来说灵活性却下降了许多。而这一点也正是许多数据分析从业者所缺少的(包括我),记得白鸦曾在他的博客中发表过数据分析师很少的言论。不管数据分析师在什么样的团队,其所起的作用都是统计和调查,数据挖掘、可行性及策略分析等类似的功能。真正的数据分析师,或者能达到企业期望要求的数据分析师为什么凤毛麟角。为什么满足企业要求的数据分析师凤毛麟角,其中一个主要的原因就是学统计的人不会数据库,而学计算机的同学不会建模分析。

SQL使得数据的采集过程变得更加方便快捷,此处的方便快捷可以从2方面得以体现,1.在分析数据时候不必再苦苦请求其他同事,自己需要什么数据自己直接去导,而不再是从别人手中接过譬如.xls或.csv之类的数据文档;2.便捷快速的清洗出自己所需要的原始数据,譬如你需要的是每个月销售额排名前20的产品相关数据,这时你就可以直接从数据库导出数据时来完成数据筛选的过程,而不是傻傻的导出所有产品销售数据再进行二次处理。关于如何利用SPSS从数据库中挑选自己所需要的数据参见Syntax代码旅途。此外,在EXCEL的多表操作中也涉及相关SQL语句,如数据透视表的应用等。

SQL查询相关小技巧

·使用AND时,将不为真的条件放在前面

数据库系统遵循运算符的优先级,并且运算过程是从左至右的,将条件不为真的放在前面,则能够省去and后面的相关运算,以达到减少数据库系统运算工作量的目的,提高工作效率。

·使用OR运算符时,则将最可能为真的条件放在前面

和上面and的原理类似,and运算符要求两边条件都为真,整个条件才为真,而or只需要一边为真,将条件为真的放在前面可使or运算符不需要检查右边的条件,从而节约时间,提高工作效率。

·distinct比group by更快

distinct和group by通常起限制结果为唯一的记录行的作用,处理此类问题时distinct往往比group by更加迅速。

·限制联合的结果

从数据库中提取的信息量越少,速度也就越快,而加适当的限制条件除了满足自身的需求之外,另外一个原因就是为了加快处理查询速度。e.g:

select var1, var2 from table1 inner join table2 ontable1.id=table2.id where condition;

·对子查询使用in运算符

在子查询过程中,运用select语句往往会使数据库系统考虑更多的东西,从而降低工作效率,相比较而言,运用in运算符则可以有效的解决这个问题。e.g:下面的子查询中第1句将比第2句更加有效

select var1, var2 from table1 where var1 in (select var1from table2 where condition);

select var1, var2 from table1 where var1=(select var1from table2 where condition) ;

·尽量避免使用select * from

指定确定的列可以让你清楚的了解你所需要采集的变量,利用select* from不只是效率低下,更不利于你的后续分析,所以对于select * from则是能避免则尽量避免。

·对整数类型列进行搜索

这类问题主要针对字符变量的查询而言,对应的字符变量如果有相应的编码对应,直接将编码设置为查询条件将比直接查询字符变量来得更加迅速。

数据采集中常用的SQL语句

相同的SQL语句运用到不同数据库中会有略微的差别,对字符变量的要求,相关函数的变化,以及语法规则的不同等等,例如:oracle数据库中对字段命名别名时不需要as 字符,没有month(),year()等时间函数等等,access数据库中在使用inner join执行内部联合时条件需用(),当然还有很多的细微差别,大家可以自己去寻找总结。下面的示例以SQL SERVER为基础编写。

1. 抽取非重复数据

select distinct var1 from tableName;

2. 抽取某个时间段间的数据

select var1,var2 from 数据表 where字段名 between 时间1 and 时间2; 3. 连接多个变量

select '123'+cast(456 as varchar);

select '123'+cast(456 as varchar)+'789';

4. 用SQL语句找出表名为Table1中的处在ID字段中1-200条记录中Name字段包含w的所有记录

select * from Table1 where id between 1 and 200 and Name like'%w%';

5. 找出拥有超过10名客户的地区的列表

select country from test group by country havingcount(customerId)>10; 6. 关于取出每个部门工资最高的前三人

select * from table t where 工资 in(select top 3 工资 from table where 部门 = t.部门 order by 工资desc); 7. 两个结构完全相同的表a和b,主键为index,使用SQL语句,把a表中存在但在b表中不存在的数据插入的b表中

insert into b select * from a where not exists(select * from bwhere "index"=a."index"); 8.从一个数据库中的多个数据表提取相关变量

Select table1.var1,table2.var2,table2.var3,

From table1 inner join table2

On tabel1.var1=table2.var1

Inner join table3

On tabel1.var2=table3.var2

(order by ……)

本文分享自微信公众号 - 数据科学与人工智能(DS_AI_shujuren)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-12-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分子对接简明教程 (一)

    分子对接(Molecular Docking)理论 所谓分子对接就是两个或多个分子之间通过几何匹配和能量匹配相互识别找到最佳匹配模式的过程。分子对接对酶学研究和...

    生信宝典
  • netty对http协议解析原理解析

    本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能...

    xiangzhihong
  • 采用Opserver来监控你的ASP.NET项目系列

    前言 之前有过2篇关于如何监控ASP.NET core项目的文章,有兴趣的也可以看看. 今天我们主要来介绍一下,如何使用Opserver监控我们的SQL Ser...

    企鹅号小编
  • 雅虎紧急修复了可导致远程命令执行的SQL注入漏洞

    最近,因存在严重的SQL漏洞,雅虎的网站遭到了侵入,受到了很大的的影响(注:该网站并不是yahoo主站,而是隶属于yahoo的一个印度创意征集网站,详情见文末)...

    FB客服
  • Linux学习-文件排序和FASTA文件操作

    环境变量的补充 PATH只是众多环境变量中的一个变量,用于存储可执行文件所在的目录,以便在用户输入命令时可以查询的到。尤其是自己写的脚本或安装的程序,系统不会知...

    生信宝典
  • Airflow配置和使用

    Airflow能做什么 Airflow是一个工作流分配管理系统,通过有向非循环图的方式管理任务流程,设置任务依赖关系和时间调度。 Airflow独立于我们要运行...

    生信宝典
  • 两枚近期IBM DB2 LUW漏洞提权分析

    IBM最近发布了两个影响DB2的linux、unix、windows三个版本的安全漏洞补丁。 而本文将探讨其中这两发漏洞(CVE-2014-0907和CVE-2...

    FB客服
  • 替代SE16N的超强悍SE16H

    文 | 大话SAP 又到了天气转冷,懒得出门,窝在家里学习新知识的季节。 也许你早就对SE11/SE16/SE16N/SQVI等T-code熟得不能再熟,不过,...

    企鹅号小编
  • 上传高通量测序原始文件

    在我们发表高通量测序文章之前通常要上传测序数据到GEO数据库,现总结流程如下。 注册账户、填写MetaSheet 在NCBI GEO官网注册一个账号,然后登陆。...

    生信宝典
  • MySQL支持哪几类分区表?

    Q 题目 MySQL支持哪几类分区表? A 答案 表分区是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券