函数
单行函数
数值函数
函数 | 功能 |
---|---|
ABS(x) | 求绝对值 |
MOD(x) | 求余数 |
CEIL(x), CEILING(x) | 向上取整 |
FLOOR(x) | 向下取整 |
RAND | 生成一个0~1之间的随机数 |
ROUND(x) | 四舍五入x |
指数与对数
函数 | 功能 |
---|---|
POW(x,y) | x的y次方 |
XP(x) | e的x次方 |
LN(x) | ln(x) |
LOG2(x) | log2(x) |
进制转换
函数 | 功能 |
---|---|
BIN(x) | 二进制 |
OCT(x) | 八进制 |
HEX(x) | 十六进制 |
CONV(x,f1,f2) | x由f1进制的数变为f2进制 |
字符串
函数 | 功能 |
---|---|
ASCII(s) | 第一个字符的ASCII码 |
CHAR_LENGTH(s) | s的字符数 |
LENGTH(s) | s的字节数,与字符集有关 |
CONCAT(s1, …sn) | 拼接 |
CONCAT_WS(x, s1, …sn) | 拼接,每个字符串间+x |
REPLACE(str,a,b) | 用b替换str中所有a |
UPPER(s) | 转换为大写 |
LOWER(s) | 转换为小写 |
STRCMP(s1,s2) | 比较s1,s2的ASCII码 |
日期与时间
流程控制
函数 | 功能 |
---|---|
IF(v,v1,v2) | (三元运算符)v为真,返回v1,否则返回v2 |
IFNULL(v1,v2) | v1不为NULL,返回v1,否则返回v2 |
CASE WHEN c1 THEN v1 WHEN c2 THEN v2…ELSE vn END | 相当于if(c1) v1 else if(c2) v2… |
CASE expr WHEN c1 THEN v1 WHEN c2 THEN v2…ELSE vn END | 相当于switch |
加密解密
函数 | 功能 |
---|---|
MD5(s) | md5加密 |
SHA(s) | sha加密,比md5更安全 |
信息
函数 | 功能 |
---|---|
VERSION() | 当前mysql版本号 |
CONNECTION_ID() | 当前mysql服务器连接数 |
DATABASE() | 当前数据库 |
USER() | 当前连接的用户名 |
CHARSET(s) | s的字符集 |
COLLATION(s) | s的比较规则 |
聚合函数
AVG / SUM
AVG(table)
: 平均数
SUM(table)
: 求和
只对数值有效
NULL不参与运算,需要将NULL考虑为0的情况,用
SUM(x) / COUNT(IFNULL(x,0))
MAX / MIN
MAX(table), MIN(table)
求最值
对于字符串,字典序排序
对于日期,时间先后排序
COUNT
COUNT(table)
指定字段出现的次数
计算表中有多少条纪录:
COUNT(*)
GROUP BY
分组
1 | #eg.查询不同的department_id的平均工资 |
使用多个列分组
1 | #eg.查询不同的department_id, job_id的平均工资 |
注意:SELECET中非组函数的字段必须声明在GROUP BY中
GROUP BY声明在FROM, WHERE后面,ORDER BY前面
1 | SELECT department_id,job_id AVG(salary) |
GROUP BY ... WITH ROLLUP
:最后一行加上对所有数据的操作
HAVING
1 | #eg |
要求:
如果过滤条件中使用了聚合函数,就必须使用
HAVING
替换WHERE
HAVING
放在GROUP BY
后面一般和
GROUP BY
一起使用
HAVING
和WHRER
对比
HAVING
适用范围更广WHRER
效率更高,HAVING
先连接后筛选,WHRER
先筛选再连接
SQL语句执行顺序
1 | SELECT DISTINCT xxx #5 |