排序查询
-
语法
-
SELECT 查询列 FROM 表 WHERE 筛选条件 ORDER BY 排序列 [asc/desc]; desc:降序 asc:升序
-
示例
-
SELECT * FROM employees ORDER BY salary DESC;
-
特点
- 默认为升序
- order by字句中可以支持单个字段、多个字段、表达式、函数、别名。
- order by一般放在查询语句最后,limiit除外
常见函数
-
类似与Java中的方法。
-
select 函数名(参数)
-
特点
- 单行函数:concat,length,ifnull等
- 分组函数:做统计使用,又称为统计函数、聚合函数、组函数。
单行函数
-
字符函数
-
length:获取参数值的字节数。
-
concat:拼接字符串
-
upper:将参数值转换为大写
-
lower:将参数值转换为小写
-
substr:索引从1开始
- (str, ops):截取从指定索引到末尾
- (str, ops, len):截取从指定索引到指定长度
-
instr(str, str):返回子字符串第一次出现的索引,找不到返回0。
-
trim:去除字符串前后空格
-
去除特定字符
-
SELECT trim('a' FROM "aaabbbaa") astr;
-
-
lpad:用指定的字符将源字符串左填充到指定长度
-
SELECT lpad('aa',10,'a');
-
-
rpad:用指定的字符将源字符串右填充到指定长度
- 注:左填充和右填充时当指定的长度比源字符串小时,源字符串右方多余的字符会被去除。
-
replace:找到参数一字符串中所有的参数二的字符串替换为参数三。
-
SELECT replace('aabbcc', 'cc', 'dd');
-
-
-
数学函数
- round:四舍五入
- (数值)
- (数值, 保留位数)
- ceil:向上取整,返回大于等于该参数的所有整数
- floor:向下取整,返回小于等于该参数的所有整数
- truncate:截断,截取保留小数点后n位
- mod:取余,和%运算符同理
- round:四舍五入
-
日期函数
- now:当前系统日期包括时间
- curdate:当前系统日期不包括时间
- curtime:当前系统时间不包括日期
- year:根据date获取年
- month:获取月,其余同理。
- monthname:获取月名,英文
- str_to_date:将字符串通过指定的格式转换为默认格式
- date_format:将字符串转换为指定格式的日期字符串
格式符 | 功能 |
---|---|
%Y | 四位年份 |
%y | 二位年份 |
%m | 一位补零月份 |
%c | 一位不补零月份 |
%d | 一位补零日 |
%H | 小时24小时制 |
%h | 小时12小时制 |
%i | 两位分钟 |
%s | 两位秒 |
-
其他函数
- version:版本
- database:当前数据库
- user:当前用户
-
流程控制函数
-
if(条件表达式, 值为true, 值为false)
-
case:
-
类似java中的switch和case
-
case 要进行的判断 when 常量 then 要显示的值或语句 when 常量1 then 要显示的值1或语句1 else 要显示的值n或语句n end
-
类似java中的多重if
-
case when 条件1 then 要显示的值1或语句1 when 条件2 then 要显示的值2或语句2 else 要显示的值3或语句3 end
-
-
分组函数
- sum:求和
- avg:平均值
- max:最大值
- min:最小值
- count:计算个数
- 注:
- 多个分组函数可以连用。
- sum、avg一般用于处理数值型。
- max、min、count可以处理任何类型。
- null值会被忽略。
- count(*)一般用于统计行数。
- 和distinct搭配去重。
- 和分组函数一同查询的字段要求是group by后的字段。
group by
-
语法
-
SELECT 分组函数,列(要求出现再group by中) FROM 表 WHERE 筛选条件 GROUP BY 分组的列表 ORDER BY 排序列表
-
-
使用having进行分组后筛选
-
分组查询中的筛选
- 分组前筛选 原始表
- 在分组前使用where
- 分组后筛选 分组后结果集
- 在分组后使用having
- 分组前筛选 原始表
-
group by子句支持单个字段分组,多个字段分组,表达式或函数。
-
在最后可以添加排序
-
注:查询列表必须特殊,要求是分组函数和group by后出现的字段