运营必看的SQL(中)

写在前面:如果你是一名程序员又恰好是一名SQLBOY的话,那么请移步,因为下面讲的实在太精彩但不专业;如果你是一名想学会写好SQL的运营,那么你一定要认真来读。

本文用形象的的语言介绍写好SQL六大必须掌握的招式,每一式都是你写好SQL的关键。可能你之前只是会用之前的一招或者两招,下面教你的是如何六招联用,发挥无穷法力。

第一式(WHERE):少商剑,剑路雄劲,颇有石破天惊,风雨大至之势 

中文意思,“在哪?哪里?”那在SQL里面where 主要用来干嘛呢?主要用来过滤数据集,所谓的过滤就是把不符合一定规则的数据给干掉,同时把符合条件的数据保留下来,这就是过滤的意思。

写在SQL里面 where 后面一般是接布尔表达式,例如:where name='张三' 表示如果name(姓名)是张三的就保留下来,其他的舍弃。

这是SQL中使用最多最常见的一式,因为我们取数据也都是取我们想要的数据大部分情况下不会是所有的数据。

第二式(JOIN):商阳剑,巧妙灵活,难以捉摸

顾名思义,“连接”的意思,所谓连接就是把两个原本分开的物体结合起来,这种结合要么通过一定的介质把二者粘合起来要么通过暴力手段硬凭借在一起。

举一个不那么恰当的例子,好比两个人结婚,如果是通过媒人介绍的那就是有介质把两个人连接在一起,通过暴力连接的就类似于强扭的瓜,硬扯到一起的。

那么这两种“连接”有什么不同呢,通过介质的连接我们需要在SQL中把介质体现出来,如 a join b on a.id=b.id,这里所谓的id就是介质,通过暴力手段连接起来有个学名叫做“笛卡尔积”,用数学方法来解释就是假如a表有m行数据,b表中有n行数据,那么笛卡尔积的效果就是m*n行的数据集合,也就是说把a表的每一行都与b表的每一行做连接,这样连接以后是一个庞大的数据集,特别是多个表做笛卡尔积时往往会把机器跑死就是这个原因。

join 细分又分为left out join(left join), full out join(full join),inner join(join),right out join(right join)这几种join的区别,可以用下面一组简单的漫画体现:


join常用的场景就是你需要提取的内容(数据列)不能完全从一个表中获取,而是分布在不同的表中(你可能会问为什么设计表的时候不把所有的列设计到一个表中,这就牵涉到范式要求了,后面我们再聊。),这个时候你就需要把不同的表连接(join)起来,然后分别从这些表中提取你需要用到的数据列(连接后的多张表,你可以认为就是一张大宽表了)。

第三式(UNION):中冲剑,大开大阖,气势雄迈 

上面是连接,下面是联合,从字面意思大家也略微能体会到二者的差异,连接是在拓宽了长度,二联合这是增加了宽度(厚度)。

举个形象一点的例子,join是把一根折断的筷子给接起来拼接成一根完整的筷子,二union是把两根筷子握在一起,形成一双筷子。

根据这个列子我们也很容易得出二者的一些语法差异,join对“连接”起来的多个数据表没有列数的要求,而union则必须要求“联合”起来的两个或者多个数据集保持相同的列数。

union 还有一个兄弟叫union all,所谓all就是把数据完全揉和在一起,二不带all的通常会把多个数据集中重复的数据行(每一列的值都相同)去重,只保留一行。

union 常用的情景是:多个数据集之间没有明显的关联(join)关系而你要的内容又分布在这些数据集中,这种情况下就需要union出场了。一般来说使用union就够了,因为没有必要保留两个完全相同的数据行。

第四式(GROUP BY):少泽剑,忽来忽去,变化精微

group,分组的意思,这一招是分析师最常用的。在什么情况下我们会用到分组呢,当我们想按照某个维度查看数据情况时,

比如查看每个学生的高考总分,各科中的最高分,最低分,平均分时都要用到分组这个概念。

总结一下,如果你的需求中有”每“,”总“,”最大“,”最小“,”平均“这几个关键字时,大概率是要用group的。

分组用来分析一般有两层意思,一是计算用来分组的维度上的统计量(计数、求和、均值等),二是比较不同组在这些分组维度上量的差异,便于对比。

group by后面的关键字就是你想要分组的维度,如城市、班级、日、月、年等。

第五式(HAVING):少冲剑,轻灵迅速

这一招是必须紧跟上面一招才能发出来的,但是它的威力也是巨大的,用的好的话可以起到事半功倍的效果。

这一招的效果其实跟第一招where有点类似,只不过where一般来说是对原始数据的单条数据进行过滤,而having则是对分组(group)聚合后的数据结果进行过滤。比如我们想取出本省高考总成绩大于600分的同学,这个时候having就排上用场了。当然你也可以用where,只不过会复杂一些,我们这里就不提倡了。

前面也说了,这一招是紧跟在group by后面使用的,所以在写法上也必须在group by 后面,如:group by student_name having sum(score)>600。

这一招通常适用的场景就是分组聚合后,分的组过多,而且有些组并不是关心的数据,这时候你就要想到having了。

第六式(ORDER BY):关冲剑,以拙滞古朴取胜

这是最后一招,这一招可能不是最厉害的一招,但是确实最伤元气的一招。为什么说他耗费元气呢,举个例子:上体育课,体育老师要求按照男生、女生分成两组。大家是不是很快就分好了;但是如果老师说不同组内在按照身高排序列队,是不是就很耗费时间了。

同样order排序虽然不是人来执行,但是计算机也要比较每一条记录的大小,在数据量很大的情况下,计算机它也快不了。

排序有什么用呢?其实用到的地方还是挺多的,比如统计各省的高考状元、榜眼、探花,女生最高分,男生最高分;本月内业绩最好的员工,入职最早的员工等,都要用到order by。

总结来说,order及可以对原始数据按照某一列排序,也可以对统计后的结果排序。

默认的排序是升序,就是按照从小到大的顺序排列,通过指定关键字desc 可以降序排序,顺序与前者相反。另外如果指定的排序列是数值型的列则按照数值的大小排序,如果指定的列是字符型的列则按照字典的顺序进行排列。

看完后,这SQL的六脉神剑你学会了吗?下次试试六式齐发,一招制敌吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352