第二部分、核心查询

内容概述:排序、分组、聚合、多表查询、合并查询、子查询

1.排序

通过order by子句,可以将查询出的结果进行排序(排序只是显示效果,不会影响真实数据)

select 字段名 from 表名 where 条件语句 order by 字段名2 asc/desc (通过字段名2排序,升序(默认)/降序)

 

(1)单列排序:只按照一个字段排序

例如:select * from mytable order by age; 默认升序

select * from mytable order by age desc; 降序排序

 

mysql 排序 field mysql 排序查找_字段

(2)组合排序:同时对多个字段进行排序,如果第一个字段相同,就按照第二个字段进行排序。

select * from mytable order by salary desc,age desc;

 

mysql 排序 field mysql 排序查找_mysql 排序 field_02

2.聚合函数

先是横向,逐行查询(进行相关条件判断);然后进行纵向查询,对某一列的值进行计算然后返回 一个单一的值(会忽略null空值)。

例如:返回一个表中的一个字段的总和/平均值等。

语法结构:select 聚合函数(字段名) from 表名;

常见的聚合函数:

count(字段名): 统计某个字段的行数

sum(字段名: 统计指定字段的数值和

max(字段名:最大值

min(字段名:最小值

avg(字段名: 平均值

例如:

select count(id) from mytable;

select sum(salary) from mytable;

select avg(age) from mytable;

值得注意的是:count(1) 与 count(*)所表达的效果一样

 

select sum(salary) '薪水总和', max(salary) '最高薪水' from mytable; 中间省略了as

mysql 排序 field mysql 排序查找_字段名_03

select sum(salary) '薪水总和', max(salary) '最高薪水' from mytable where age>25;

 

 

mysql 排序 field mysql 排序查找_聚合函数_04

3.分组:适用group by语句对查询的信息进行分组

分组往往和聚合函数一起使用,对数据分组,分完组后各个组内进行聚合统计分析。

select 分组字段/聚合函数 from 表名 group by 分组字段 having 条件 #其中having指对分组后的结果进行进一步过滤

例如:

select * from mytable group by sex #这样写没有聚合函数,没有实际意义。

重点理解group by是如何分组的:

先是各自分组,然后只显示各个组的第一个数据。分组的目的是为了统计,没有聚合函数,便没有实际意义。

select sex(这里是group by的字段的重复,虽然不添加也可以执行),avg(salary) from mytable group by sex;

#记住(1)group by 的字段必须出现在select的位置。

(2)前面select 的位置,除了group by的字段、聚合函,不能出现其他字段。

select name,avg(salary) from mytable where name is not null group by name;

mysql 排序 field mysql 排序查找_字段_05

这里用名字分组可能体现的不明显,因为没有相同的部分可以分为一组,于是添加一个工作城市的字段进行分类。

mysql 排序 field mysql 排序查找_字段名_06

查询平均薪资大于3000的城市:

select department,avg(salary) from mytable where department is not null group by department having avg(salary)>3000;

mysql 排序 field mysql 排序查找_字段名_07

#where与having的区别

where:分组前的过滤,后不能接聚合函数

having:分组过后的过滤,后可以接聚合函数

 

1.4limit关键字:用于限制返回的查询结果的行数(即:可以通过limit指定查询多少行数据)

limit语法是MySQL的方言(专有),可以用来完成分页。(因为每一页的内容显示的记录往往是固定的)

select 字段1,字段2... from 表名 limit soofset,length;

limit offset,length 关键字可以接受一个或两个为0或者正整数的参数

offset 起始行数,默认从0开始

length 返回行数

例如:select * from mytable limit 1,3;

mysql 排序 field mysql 排序查找_聚合函数_08

 

学习永远不会迟