写在前面:如果你是一名程序员又恰好是一名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的六脉神剑你学会了吗?下次试试六式齐发,一招制敌吧。

运营必看SQL(中)—写好SQL的“六脉神剑相关推荐

  1. 在SQL中使用PL/SQL函数存在的问题

    -----------------------------Cryking原创------------------------------ -----------------------转载请注明出处, ...

  2. 产品运营必看!这6本书你不该错过!

    我2016年初进的同花顺公司,至今刚好16个月.当时公司新开了一个项目--投资账本,项目经理招兵买马时讲到产品的使命是为中国广大的投资者做最好用的投资记账管理软件,帮助投资者评估投资成败,改善资产配置 ...

  3. 抖音运营必看的7种玩法和9个类目定位

    抖音运营必看的7种玩法和9个类目定位 短视频趋势越来越火爆,而抖音的强势崛起和成长见证了短视频最高光的时刻. 作为一个网络创业营销师和运营人,最近我一直在抖音上研究各种爆红的抖音达人,研究他们的定位. ...

  4. oracle 作业调度里pl/sql怎么写,PL/SQL实现Oracle数据库任务调度

    PL/SQL实现Oracle数据库任务调度 PL/SQL实现Oracle数据库任务调度 正在看的ORACLE教程是:PL/SQL实现Oracle数据库任务调度.摘要:本文主要就数据库恢复与系统任务的调 ...

  5. oracle同sql中isnull无法,SQL中的ISNULL函数使用介绍

    这篇文章主要为大家详细介绍了SQL中的ISNULL函数使用介绍,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! ISNULL 使用指定的替换值替换 ...

  6. 【想稳,必看】毕业设计写这个你就赢了《Vue+Node 项目实战:拼多多前后端商城》

    拒绝白嫖,各位看客记得点赞评论"妙-啊~~~"在此占坑 在某个年纪之前,你可以靠透支身体.小聪明和老天给你的运气一直取巧地活着.然而到了某个年纪之后, 真正能让你走远的,都是自律. ...

  7. SQL中的动态SQL

    在介绍动态SQL前我们先看看什么是静态SQL 静态SQL 静态 SQL 语句一般用于嵌入式 SQL 应用中,在程序运行前,SQL 语句必须是确定的,例如 SQL 语句中涉及的列名和表名必须是存在的.静 ...

  8. 创造“奇迹”的黄金圈法则,运营必看

    对于一款新产品来说,如果没有告诉用户做这件事的意义,用户可能会陷入迷茫.在TED<伟大的领袖是如何激励行动的>中西蒙·斯涅克曾提出了黄金圈法则,他认为做每一件事都应该有背后的原因(why) ...

  9. CI中写原生SQL(封装查询)

    封装查询 封装,通过让系统为你组装各个查询语句,能够简化你的查询语法.参加下面的范例: $sql = "SELECT * FROM some_table WHERE id = ? AND s ...

最新文章

  1. OenLDAP 配置记录
  2. IIS配置网站定时任务必设参数图文教程
  3. float 与 double、隐式类型转换、switch、重写与重载、Java 与 C++ 的区别、JRE or JDK
  4. 事务消息应用场景、实现原理与项目实战
  5. 前端学习(1403):多人管理23错误unexpected identifier
  6. STM32之通用定时器输出比较模式
  7. 美女被偷之后.....
  8. android 内核内存管理,Android内核相关内容总结
  9. python调用自己写的函数_python调用自定义函数的实例操作
  10. java List的简单运用
  11. 什么是serialVersionUID?serialVersionUID详解
  12. 锁卡,每插入一张新卡都需要进行解锁
  13. 如何在markdown中打出上标、下标和一些特殊符号 from jianshuer 这是朕的江山
  14. 2022年全球程序员收入报告出炉:国内程序员人均56w年薪。。网友说:我拖后腿了!...
  15. OpenCV 凸包查找,Graham详解
  16. 计算机科学与技术中文核心期刊
  17. 成人赛道IT职业教育将迎来“黄金发展期”
  18. 《三、企业级SVN运维实战:SVN服务配置https访问》
  19. L1-021 重要的话说三遍 (5 分)
  20. Python程序来计算锥体的体积和面积

热门文章

  1. Advanced Installer 11.0打包cad插件教程
  2. PDF怎么转换成Word?给大家分享三种简单的转换方法
  3. 纸的折法(包括:枫叶,梅花,千纸鹤,小狗,豹子,蛇,大象,狐狸,鹅,老鼠,猴子,骆驼,蜻蜓,蝎子,瓢虫,螳螂,蜜蜂,船和小猫咪)...
  4. 基于同步压缩小波变换(Synchrosqueezed wavelet transforms)的时频分析的MATLAB实现(不使用内置函数wsst)
  5. 关于融合软件运行unity程序被闪退解决方案
  6. Mnist数据集训练-手写数字的识别
  7. oppo手机删除计算机怎样恢复,【数据恢复篇】oppo手机删掉的照片怎么恢复
  8. 2022 . 11 . 26 测试赛解题报告
  9. Kerberos-KDC
  10. windows kerberos认证报错:Cannot find KDC for requested realm