大家好,我是jacky朱元禄,很高兴继续跟大家分享《MySQL数据分析实战》系列课程,前面的课程jacky分享了数据层面增删改查中的增删改,下面的课程我们要说增删改查的这个查,jacky说数据层面的查询在我们MySQL中是最重要的,也是最复杂的;

为了更有逻辑性的讲清楚这个查,jacky给大家编了二首打油诗,每个打油诗共八句,jacky称之为八句箴言,作为我们学习SQL查询的逻辑统领,那在这个八句箴言的统领下,jacky展开对SQL查询语句的分享;

上次课jacky用配乐诗朗诵的形式跟大家分享了单表查询的八句箴言,这样的形式也是为了大家印象更深的记住这几句话,我们既然有单表查询的八句箴言,对应的jacky后续还会分享多表操作的八句箴言,这是后面课程我们要来解决的,本次课,我们先回顾一下上次课jacky朗诵的单表查询的八句箴言:

  • 不管三七二十一,先把数据show来看

  • 数据清洗两条路,唯一where走一走

  • 清洗数据有空值,is not 来去除

  • 结构数据有标准,as 别名来规范

  • 别拿 SQL做分析,关公面前耍大刀

  • 要想分析怎么办,编程语言是主力

  • SQL函数茫茫多,真的不能用太多

  • 筛选透视是基础,分组聚合要熟记

(一) 第一句 的逻辑线

八句箴言第一句:不管三七二十一,先把数据show来看

1.1 MySQL到底是做什么的?-课程中期总结

好,为了搞懂这八句箴言的第一句,我们一定要搞懂这MySQL到底是做什么的这个事情?在课程的前期jacky说,这数据库就是存储数据的,并且说了我们为什么要引入数据库,如果有忘记的小伙伴可以翻阅前面的课程,也就是前面我们对于MySQL到底是什么这个问题,我们仅仅从是什么和为什么的层面说了,是吧;

  • (1) 数据库就是存储数据的:解决了是什么的问题;

  • (2)为什么要引入数据库:解决了为什么的问题;

  • (3)那数据库的企业应用场景是什么呢?知道了这个我们就解决了怎样使用MySQL的问题;

    • 好,大家听好,MySQL的应用场景有两个:

          - (a)方便网站或应用程序上传数据
      - (b)方便后期数据统计

这就是jacky的分享风格,别来那么多理论,实际上MySQL的应用场景就这么两个;举个不恰当的比如,大家都知道区块链技术现在很火,是吧,但是理论层面前景广阔,但是应用层级真的是现阶段做不了什么,就跟MySQL一样,MySQL理论层面上,理论层面上可以实现共享、减少数据冗余,集中控制等等,每一个点深入下去都是科技前沿,可我们工作中,数据库就是为了方便我们给网站或者是应用程序上传数据的,就是这么回事;

我给大家具一个例子,我们看下jacky用编程语言框架做的一个网站,大家不用管什么事编程语言,也不用管什么框架,jacky 就是做了一个网站,为了上传资料方便吗,我们就要用数据库了,这里jacky就选择MySQL数据库

1.1.1 方便网站上传数据

  • 注意jacky这里说的是方便网站上传数据,MySQL

1.1 SQL查询模型-初级形态(1)

select + 字段列表/* + from + 表名

1.选择特定的字段

select id,name from user;

2.给字段取别名 - as

  • 作用:缩短SQL语句

  • 字段和字段之间必须用逗号,字段和别名之间要不用as,要不用空格

3.distinct关键字的使用-取出唯一值

select distinct name from user;

4.使用where条件进行查询

select * from user where id>=5 and id<7;

5.查询空值null

select * from user where name is null;

select * from user where name is not null;

6.搜索like关键字

搜索名字里带有a的字段

select * from user where name like ‘%s%’;

  • 包含什么在它前后加%,%在计算机里往往代表任意多个字符的意思;

7.使用order by对查询结果培训

默认是升序,asc 可加也可不加

select * from user order by id asc;

select * from user order by id desc;

8.使用limit 限定输出个数

select * from user order by id desc limit 0,3;

9.Excel 字段合并: concat

select id,name,pass,concat(id,’-‘,name) idname from user;

10.rand函数-目的不是求随机数,是为了随机排序

  • 比如说我们要做一个随机点名,或者是随机抽奖的系统

select * from user order by rand() limit 1;

  • 我们可以查看我们MySQL的内置手册,有许许多多的函数,如果我们不是专门在公司里做优化的,jacky是反对学习过多的MySQL函数,尽量的编程语言能完成的,Python能完成的,Java能完成的,PHP能完成的,MySQL就不要去做,MySQL只是一个数据的存储器,就跟U盘一样,你就把数据存进去,再把数据取出来,其余事情不要交给MySQL去做,MySQL本身是一种检索技术,检索本身就要消耗很多资源,所以jacky说学MySQL不要学那么多函数,所有函数都要学习,一周的时间也是不够的,因为这些函数,编程语言Python,java,php等等都有了,我们为什么还要学这么多函数;还有就是,在MySQL中如果有一列用了函数,这一列的索引就要失效了;

所以用函数时,我们首要考虑编程语言来做;

  • 11.count()

    • 统计个数
  • 12.求和、平均数、最大值、最小值

    • select count(id),sum(age),avg(age),max(id),min(id) from user;
  • 这里对于count函数,有个技巧,在MySQL5.1之后,内部优化了conunt(*) 这个函数用法,可以快速的统计个数

  • count(*)这个功能是经常被用到的,比如说我们总共有多少帖子,总共有多少商品,总共有多少注册用户

  • 需求:下面为网站留言板上的一些数据,现在想知道每一人今天发的多少帖子

  • 首先我们要分组,给人分组,分组的依据是人,分组后在把每一个人发多少帖子在聚合起来,这里我们就要讨论一个问题:分组并且聚合;

  • select name,count(id) from mess group by name;

  • 我们看到user1发了3篇帖子,user2和user3发了1篇帖子,user6发了2篇帖子;

  • 这里用的count来聚合,count可以收集一个列,从上到下的个数,

  • 我们也可以分组后再排序,看一下发帖子的人从少到多排下顺,这里有个细节就是分组一定要写在order by前面,而不能是排了序后在去分组;

    • 我们想一下肯定是先分组在排序才是合理的,如何先排序,在分组,那排序就没有任何意义了,所以这里MySQL对于分组和排序就搞了一个优先级,我们设想如何我们是开发MySQL的人员我们也会这样的设定优先级规则,所以,jacky一直说MySQL是个很严谨的软件;
  • 那分组的基础上加条件呢,我们就用having,而不是where,这里大家要注意,

  • 下面有个需求,就是找出发帖数大于1的发帖人和发帖个数,那我们应该怎么写呢?

    • select name ,count(id) from mess group by name having count(id)>1;

比Excel还简单的SQL语句查询的更多相关文章

  1. 如何用SQL语句查询Excel数据?

    如何用SQL语句查询Excel数据?Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMOp ...

  2. 如何把Excel数据转化成SQL语句-转

    问题背景 在我们实际的程序开发.维护的过程中,很多时候都要和Excel打交道. 因为用户的数据很多时候是Excel存储的. 公司维护项目的时候,经常要帮客户导入Excel数据,这些数据很多,零 碎,而 ...

  3. SQL点滴32—Excel中CONCATENATE函数生成SQL语句

    原文:SQL点滴32-Excel中CONCATENATE函数生成SQL语句 当拿到一个Excel的时候需要将这里面的数据插入到数据库里面,该怎么办,除了使用SSIS数据导入之外还可以使用Excel中的 ...

  4. [20190328]简单探究sql语句相关mutexes.txt

    [20190328]简单探究sql语句相关mutexes.txt --//摘要:http://www.askmaclean.com/archives/understanding-oracle-mute ...

  5. mysql / pgsql 使用sql语句查询数据库所有表注释已经表字段注释

    mysql使用sql语句查询数据库所有表注释已经表字段注释(转载)   场景: 1. 要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 ‘mammo ...

  6. 项目总结04:SQL批量导入数据:将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库

    将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库 写在前面:本文用的语言是java:数据库是MySql: 需求:在实际项目中,经常会被客户要求,做批量导入数据:一般的简单的单表数 ...

  7. 四种简单的sql语句(增删改查语句)

    四种简单的sql语句(增删改查语句) 一.插入语句 insert into [table] ([column],[column],[column]) values(?,?,?) 二.删除语句 dele ...

  8. 使用Query进行HQL语句查询和SQL语句查询

    HQL的语法比较简单,与普通SQL的区别之处是针对对象的不同,在查询语句中将sql中的表名替换成了sql中的持久化类名,因为hibernate机制是基于对象进行查询的. 不带参数的查询,语句是“fro ...

  9. sql语句查询

    1. sql语句查询某位数字或者某几位数字开头的数据,字段类型为数字类: %’: 2. sql搜索以4开头和含有李字的数据: select * from wlzbpre_user where real ...

随机推荐

  1. hdu 1242 不用标记数组的深搜

    #include<stdio.h>#include<string.h>char mapp[220][220];int m,n,mmin;void dfs(int x,int y ...

  2. windows下安装phpredis扩展

    根据phpyinfo获取自己的php信息 x86,php5.6,TS,VC11 在pecl网站上找到对应的版本 5.6 Thread Safe (TS) x86 https://pecl.php.ne ...

  3. Java源码阅读之ArrayList

    基于jdk1.8的ArrayList源码分析. 实现List接口最常见的大概就四种,ArrayList, LinkedList, Vector, Stack实现,今天就着重看一下ArrayList的源 ...

  4. MySQL 查询优化 - 关联查询

    1. 关联查询执行流程 MySQL执行关联查询的策略很简单,他会从一个表中循环取出单条数据,然后用该条数据到下一个表中寻找匹配的行,然后回溯到上一个表,到所有的数据匹配完成为止.因此也被称为" ...

  5. English-培训5-How much is it

  6. STM8 uart1

    举例 int main() { UART1_DeInit(); //波特率9600,数据位8,停止位1,校验位无,非同步模式,发送接收使能 UART1_Init(9600, UART1_WORDLEN ...

  7. Linux 命令之 alias

    alias 的作用是为命令设置别名,用于提高输入效率 alias 的临时设置 临时设置很简单,直接举例说明 [r@1lin24 ~]$ alias cdlog='cd /var/log' [r@1li ...

  8. git 在不同服务器主机上同步 git 仓库

    git 在不同服务器主机上同步 git 仓库 参考链接:https://opentechguides.com/how-to/article/git/177/git-sync-repos.html 1. ...

  9. PYTHON WEB开发学习路线

    两年大数据广告项目测试:项目覆盖几千万用户前景还不错:只是在工作中感觉测试太无力,最近准备辞职转web开发:同时会离开成都,(/(ㄒoㄒ)/~~待了6年,要离开喜欢的城市,喜欢的女孩很难受) ps:列 ...

  10. WebAPI 问题集锦

    一.OWIN 禁用设置 在项目中添加了 OWIN 的引用,打算后面用到,但是在启动项目的时候报错: “No assembly found containing a Startup or [Assemb ...