比Excel还简单的SQL语句查询
大家好,我是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语句查询的更多相关文章
- 如何用SQL语句查询Excel数据?
如何用SQL语句查询Excel数据?Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMOp ...
- 如何把Excel数据转化成SQL语句-转
问题背景 在我们实际的程序开发.维护的过程中,很多时候都要和Excel打交道. 因为用户的数据很多时候是Excel存储的. 公司维护项目的时候,经常要帮客户导入Excel数据,这些数据很多,零 碎,而 ...
- SQL点滴32—Excel中CONCATENATE函数生成SQL语句
原文:SQL点滴32-Excel中CONCATENATE函数生成SQL语句 当拿到一个Excel的时候需要将这里面的数据插入到数据库里面,该怎么办,除了使用SSIS数据导入之外还可以使用Excel中的 ...
- [20190328]简单探究sql语句相关mutexes.txt
[20190328]简单探究sql语句相关mutexes.txt --//摘要:http://www.askmaclean.com/archives/understanding-oracle-mute ...
- mysql / pgsql 使用sql语句查询数据库所有表注释已经表字段注释
mysql使用sql语句查询数据库所有表注释已经表字段注释(转载) 场景: 1. 要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 ‘mammo ...
- 项目总结04:SQL批量导入数据:将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库
将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库 写在前面:本文用的语言是java:数据库是MySql: 需求:在实际项目中,经常会被客户要求,做批量导入数据:一般的简单的单表数 ...
- 四种简单的sql语句(增删改查语句)
四种简单的sql语句(增删改查语句) 一.插入语句 insert into [table] ([column],[column],[column]) values(?,?,?) 二.删除语句 dele ...
- 使用Query进行HQL语句查询和SQL语句查询
HQL的语法比较简单,与普通SQL的区别之处是针对对象的不同,在查询语句中将sql中的表名替换成了sql中的持久化类名,因为hibernate机制是基于对象进行查询的. 不带参数的查询,语句是“fro ...
- sql语句查询
1. sql语句查询某位数字或者某几位数字开头的数据,字段类型为数字类: %’: 2. sql搜索以4开头和含有李字的数据: select * from wlzbpre_user where real ...
随机推荐
- logback日志无法按日期分割的问题
发现在线上的时候,日志无法按日期分割的问题,所有日志都在第一天部署的那个日期的文件里面. 背景是Springboot + logback 原因是: 之前是: 用timeBaseRollingPolic ...
- js同时获取多个共同class内容标签内容集合
1.获取标签内容 标签如下: <img image-code="#qq_1_gif#" class="emoji_icon" src="i ...
- vue中修改第三方组件的样式并不造成污染
vue引用了第三方组件, 需要在组件中局部修改第三方组件的样式, 而又不想去除scoped属性造成组件之间的样式污染. 此时只能通过>>>,穿透scoped. 但是,在sass中存在 ...
- jquery判断数据类型源码解读
var class2type = {}; ("Boolean Number String Function Array Date RegExp Object Error").spl ...
- echarts使用结合时间轴timeline动态刷新案例
1.echarts简介 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Fire ...
- CentOS7安装CDH 第八章:CDH中对服务和机器的添加与删除操作
相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...
- Crossover 19(Mac运行Windows应用程序)
怎样才能在Mac上运行Windows应用程序?相信这是很多朋友都在问的问题,今天macdown(mac软件平台)小编为大家带来Crossover 19 Mac版下载,Crossover 19 mac版 ...
- 如何为Spring Boot应用程序配置端口
[转]https://www.javaroad.cn/questions/11162 1 个月前 1.1通过属性文件更新 . /src/main/resources/application.prope ...
- 2016年第六届蓝桥杯C/C++程序设计本科B组决赛 ——一步之遥(填空题题)
一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里.矿车停在平直的废弃的轨道上.他的面前是两个按钮,分别写着“F”和“B”. 小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退.按F,会 ...
- FontLab
FontLab 字体制作软件