大家好,我是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. Redis缓存如何保证一致性

    为什么使用Redis做缓存 MySQL缺点 单机连接数目有限 对数据进行写速度慢 Redis优点 内存操作数据速度快 IO复用,速度快 单线程模型,避免线程切换带来的开销,速度快 一致性问题 读数据的 ...

  2. 【转载】Spring JdbcTemplate详解

    JdbcTemplate简介 Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中. JdbcTempla ...

  3. VBA字符串(十二)

    字符串是一个字符序列,可以由字母,数字,特殊字符或全部字符组成. 如果一个变量被包含在双引号""中,则被认为是一个字符串. 语法 variable_name = "thi ...

  4. vue多页面项目搭建(vue-cli 4.0)

    1.创建vue项目 cmd命令执行 vue create app (app 自定义的项目名) 一般都会选择后者,自己配置一下自己需要的选项(空格为选中) 这是我个人需要的一些选项,路由Router.状 ...

  5. How to change SAPABAP1 schema password In HANA

    Symptom How to change SAPABAP1 schema password Environment HANA 1.x HANA 2.x Resolution Shutdown the ...

  6. java保证多线程的执行顺序

    1. java多线程环境中,如何保证多个线程按指定的顺序执行呢? 1.1 通过thread的join方法保证多线程的顺序执行, wait是让主线程等待 比如一个main方法里面先后运行thread1, ...

  7. PE重装系统

    PE重装系统 PE: 含义:全称 Windows Preinstall Environment,即Windows 预安装环境 作用: 是一个用于Windows安装准备的最小操作系统,其实就是一个简易版 ...

  8. 【appium】踩过的坑

    1.appium(v1.9.1),在模拟器(蓝叠)上启动app时,软件闪退. 在命令行使用dump aapt dump badging查看包时 name=com.imooc.component.imo ...

  9. djangoNotes

    学员管理 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  10. 【清单】值得「等待」的12个指示加载状态的 js 库

    以下优选 GitHub 上高 star 的指示加载状态的 JavaScript 库.另外这里还有10个有意思的 JavaScript 实战小项目供大家学习. 上期入口:一份数据分析学习清单.xls M ...