1. 排序子句 order by
使用order by子句,对查询结果进行排序,默认是升序
//语法
order by 指定排序的列 asc 升序、desc 降序
//举例
select * from order_table where user_id in (1,4)
order by price; //升序排列
select * from order_table where user_id in (1,4)
order by price desc; //降序排列
说明:order by子句一般位于select语句的结尾
2. 常用聚合函数
2.1 DISTINCT 对某一列数据去重(包含Null)
//语法
SELECT DISTINCT 列名 FROM 表名 //显示此列不重复的数据
//举例
select distinct user_nick from user_info_table;
2.2 COUNT 统计总行数
类型 | 说明 |
---|---|
count(*) | 包括所有列,返回表中的总行数,在统计结果的时候,不会忽略列值为null的行数 |
count(1) | 包括所有列,1表示一个固定值,没有实际含义,在统计结果的时候,不会忽略列值为null的行数,和count(*)的区别是执行效率不同 |
count(列名) | 只包括列名指定列,返回指定列的行数,在统计结果的时候,不统计列值为null的行数 |
count(distinct 列名) | 返回指定列的不重复的行数,在统计结果的时候,会忽略列值为null的行数(不包括空字符串和0) |
select count(distinct user_nick)
from user_info_table; //返回指定列的不重复的行数,不统计列值为null的行数
- count(*) count(1) count(列名)执行效率比较
(1)如果列是主键,count(主键列名)优于conut(1),如果列不是主键,则相反
(2) 如果表中存在主键,count(主键列名)效率最优
(3)如果表中只有一列,则count()效率最优
(4)如果表有多列,且不存在主键,则count(1)效率优于count()
备注:数据量特别大时才会体现出来
2.3 MAX/MIN最大值、最小值
Max/min函数返回满足where条件的一列的最大/最小值
SELECT MAX(列名) FROM 表名; //最大值语法
select max(price) from order_table; //举例
SELECT MIN(列名) FROM 表名; //最小值语法
select min(price) from order_table; //举例
2.4 AVG 平均值
AVG函数返回满足where条件的一列的平均值
SELECT AVG(列名) FROM 表名; //平均值语法
select avg(price) from order_table; //举例
2.5 SUM 求和
SUM函数返回满足where条件的一列求和
SELECT SUM(列名) FROM 表名; //求和语法
select sum(price) from order_table; //举例
2.6 聚合函数使用方法
(1)结合where使用
select sum(price) from order_table where user_id=1; //结合where使用
(2)多个聚合函数同时使用
select sum(price),avg(price),max(price),min(price)
from order_table where user_id=1; //多个聚合函数同时使用
(3)结合count使用
select sum(price),avg(price),max(price),min(price),count(1)
from order_table where user_id=1; //结合count使用
3. limit的用法(一般跟在最后面)
//语法
select * from 表名 limit m,n //m是指从哪行开始,m从0取值,0表示第一行;n指从第m+1条开始,取n条
//举例
select * from 表名 limit 0,2; //表示从第1行开始,显示2行结果
select * from order_table limit 2,3; //从第3行开始,显示3行数据
如果只给定一个参数,它表示返回最大的行数目:
select * from order_table limit 5; //表示查询前5行
4. group by 分组(面试可能会问)
使用group by子句对列进行分组,还可使用having进行二次过滤,having通常跟在group by后面
(1)不分组时
select max(price) from order_table group by user_id;
//正常不分组时,显示最大价格
(2)分组时
select max(price),user_id from order_table
group by user_id; //按照user_id分组,显示最大价格(按照user_id分组,一人一组,显示每组最大价格)
使用user_id分组,前面user_id就不能单独出现,可以使用聚合运算,如果二者不相同,则会报错
select sum(price),user_id from order_table
group by product_id; //此处按照product_id分组,前面user_id就不能单独出现,会报错
select sum(price),count(user_id),product_id from
order_table group by product_id; //4个人买1001商品,总价19.96;4个人买1002商品,总价59.96
(3) 不加having
select filed,聚合函数 from 表名 where 子句 group by field; //不加having
(4) 加having
Select filed,聚合函数 from 表名 where 子句
group by filed having 聚合函数 过滤条件;//加having进行二次过滤,filed表示列名,聚合函数指count/sum等
select sum(price),count(user_id),product_id from
order_table group by product_id having count(user_id)>2;
- 说明
使用group by后只能展示分组的列名+聚合函数结果,因为其余列已经基于分组这一列合并