MySQL排序查询介绍\常见函数介绍\分组函数介绍
排序查询介绍
语法:SELECT查询列表 FROM 表名 [WHERE 筛选条件] ORDER BY 排序列表[ASC(升)/DESC(降)];
特点:i、ASC代表升序,DESC代表降序,如果不写,默认是升序
ii、ORDER BY 子句中可以支持单个字段、多个字段,表达式、函数、别名
iii、ORDER BY子句一般放在查询语句的最后面,LIMIT子句除外
1、按表达式排序:
SELECT *,表达式 AS 别名 FROM 表名ORDER BY 表达式 DESC;
2、按别名排序:
SELECT *,表达式 AS 别名 FROM 表名 ORDER BY 别名 DESC;
3、按函数排序:
SELECT LENGTH(字段名)字节长度 FROM 表名 ORDER BY LENGTH(字段名) DESC;
4、按多个字段排序:
SELECT * FROM 表名 ORDER BY 字段名1 ASC,字段名2 DESC;
常见函数介绍
概念:类似于Java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。
好处:1、隐藏实现细节,
2、提高代码的重用性。
调用:SELECT 函数名(实参列表) 【FROM 表名】;
i、叫什么(函数名)ii、干什么(函数功能)
分类:1、单行函数:CONCAT,LENGTH,IF NULL等,
分类:字符函数,数学函数,日期函数,其他函数,流程控制函数。
2、分组函数:功能:做统计使用,又称统计函数,聚合函数,组函数。
一、字符函数(函数可嵌套使用)
1、LENGTH:用于获取参数的字节个数
SELECT LENGTH(‘John’);——【4】
SELECT LENGTH(‘张三丰hahaha’)——3+3+3+6【15】
注意:字符集utf8:1 character=3 bytes,1 汉字=1 character,一个汉字占3个字节,一个英文字母占一个字节
字符集gbk:1 character=2 bytes,1 汉字=1 character,一个汉字占2个字节,一个英文字母占一个字节
2、CONCAT:用于拼接字符串
SELECT CONCAT(‘字符串1’,‘字符串2’,······) 别名 FROM 表名
3、UPPER:字母全大写
SELECT UPPER(‘Jhon’);——【JHON】
4、LOWER:字母全小写
SELECT LOWER(‘Jhon’);——【jhon】
5、SUBSTR\SUBSTRING:索引(从1开始)
截取从指定索引处后面所有的字符
SELECT SUBSTR(‘李莫愁爱上陆湛远’,7);——【陆湛远】
截取从指定索引处指定字符长度的字符
SELECT SUBSTR(‘李莫愁爱上陆湛远’,1,3);——【李莫愁】
6、INSTR:返回子串第一次出现索引,如果找不到返回0
SELECT INSTR(‘李莫愁爱上陆湛远’,‘陆湛远’);——【6】
7、TRIM:去除字符串前后的字符
SELECT TRIM(‘a’ FROM ‘aaa张aaa翠山aaa’);——【张aaa翠山】
8、LPAD:用指定的字符实现左填充指定长度
SELECT LPAD(‘王保保’,10,‘a’);——【aaaaaaa王保保】
9、RPAD:用指定的字符实现右填充指定长度
SELECT RPAD(‘王保保’,10,‘a’);——【王保保aaaaaaa】
10、REPLACE:替换
SELECT REPLACE(‘李莫愁爱上陆湛远’,‘李莫愁’,‘赵敏’);——【赵敏爱上陆湛远】
二、数学函数
1、ROUND:四舍五入
SELECT ROUND(1.65);——【2】
SELECT ROUND(-1.65);——【-2】
SELECT ROUND(1.567,2);——【1.57】
2、CEIL:向上取整,返回大于等于该参数的最小整数
SELECT CEIL(1.002);——【2】
SELECT CEIL(1.000);——【1】
SELECT CEIL(-1.02);——【-1】
3、FLOOR:向下取整,返回小于等于该参数的最大整数
SELECT FLOOR(-9.99);——【-10】
4、TRUNCATE:截断,小数点后取几位
SELECT TRUNCATE(1.56,1);——【1.5】
5、MOD:取舍
MOD(a,b):a-a/bb
MOD(-10,-3)😦-10)-(-10)/(-3)(-3)=(-10)-3*(-3)=-10-9=-1
结果的正负由前一个数值决定
SELECT MOD(10,3);——【1】
SELECT MOD(-10,-3);——【-1】
SELECT 10%3;——【1】
三、日期函数
1、NOW返回当前系统日期+时间
SELECT NOW();
2、CURDATE返回当前系统日期,不包含时间
SELECT CURDATE();
3、CURTIME返回当前系统时间,不包含日期
SELECT CURTIE();
4、可以获取指定的部分,年、月、日、小时、分钟、秒
SELECT TEAR(NOW()) 年;
SELECT TEAR(‘1998-1-1’) 年;——【1998】
SELECT TEAR(’‘字符串) 年 FROM 表名;
5、STR_TO_DATE将日期格式的字符转换成指定格式的日期
STR_TO_DATE(‘9-13-1999’,’%M-%D-%Y’);——【1999-09-13】
6、DATE_FORMAT:将日期转换成字符
DATE_FORMAT(‘2018/6/6’,’%Y年%m月%d日’);——2018年06月06日
四、其他函数
1、查询MySQL版本号:
SELECT VAERSION();
2、查询当前数据库:
SELECT DATABASE();
3、查询当前用户:
SELECT USER();
五流程控制函数
1、IF函数:if else的效果
SELECT IF(10>5,’’,’’);
SELECT 字段名 IF(字段名 IS NULL,‘字符1’,‘字符2’) FROM 表名;
2、CASE函数的使用一:switch case的效果,多用于显示等于——等于判断
java中:switch(变量或表达式){
case 常量1:语句1;break;
case 常量2:语句2;break;
······
default:语句n;break;
MySQL中:CASE 要判断的字段或表达式
WHEN 常量1 YHEN 要显示的值1或语句1;
WHEN 常量2 YHEN 要显示的值2或语句2;
······
ELSE 显示的值n或语句n;
END;
CASE函数的使用二:类似于多重if语句,多用于显示区间——区间判断
java中:if(条件1){
语句1;
}else if(条件2){
语句2;
}······
else{
语句n;
}
MySQL中:CASE
WHEN 条件1 THEN 显示的值1或语句1
WHEN 条件2 THEN 显示的值2或语句2
·······
ELSE 显示的值n或语句n
END;
分组函数介绍
功能:做统计使用,又称统计函数,聚合函数,组函数。
分类:SUM 求和,AVG 平均值,MAX 最大值,MIN 最小值,COUNT 计算个数。
1、简单使用:
SELECT SUM(字段名) FROM 表名;
SELECT SUM(字段名),AVG(平均值) FROM 表名;
2、函数支持哪些类型:
SUM,AVG一般用于处理数值型;MAX,MIN,COUNT可以处理任何类型
3、是否忽略NULL值:
以上分组函数均忽略NULL值
4、和DISTINCT去重搭配
SELECT SUM(DISTINCT 字段名) FROM 表名;
5、COUNT函数的详细介绍
SELECT COUNT() FROM 表名;——统计表的总行数
SELECT COUNT(常量值) FROM 表名;——新建一列,统计表的总行数
效率:MYISAM存储引擎下,COUNT()效率更高;
INNODB存储引擎下,COUNT(*)和COUNT(常量值)的效率差不多,比COUNT(字段)要高一些;
6、和分组函数一同查询的字段有限制,字段要求是GROUP BY后的字段
分组查询介绍
语法:SELECT 分组函数,列(要求出现在GROUP BY的后面)
FROM 表
[WHERE 筛选条件]
GROUP BY 分组的列表
[HAVING 筛选条件]
[ORDER BY 子句]
注:查询列表必须特殊,要求是分组函数和GROUP BY后出现的字段
特点:1、分组查询中的筛选条件分为两类
数据源 | 位置 | 关键字 | |
---|---|---|---|
分组前筛选 | 原始表 | GROUP BY子句的前面 | WHERE |
分组后筛选 | 分组后的结果集 | GROUP BY子句的后面 | HAVING |
i、分组函数做条件肯定是放在HAVING子句中;
ii、能用分组前筛选的,就优先考虑使用分组前的筛选
2、GROUP BY子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或函数(用的较少)
3、也可以添加排序(排序放在整个分组查询的最后)