1.单行函数和多行函数(聚合函数、分组函数):
只对一行进行变换 每行返回一个结果;
(1).单行函数:
a.数值函数:
基本函数:
- ABS(x)---绝对值;
- SIGN(x)---0:0,整数:1,负数:-1;
- CELL(x)、CELLING(x)---天花板函数,取离该值最近的,大于该值的整数;
- FLOOR(x)---地板函数,取离该值最近的,小于该值的整数;
- LEAST(...),GREATEST(...)
- RAND()--->0-1、RAND(x)--->x是因子,如果两个随机数的因子是相同的那么得到的随机数也是相同的。---随机数;
- ROUND(x)--->舍去小数位;ROUND(x,y)--->保留y位小数,如果y是负数,就去看整数位的保留值,将第几位舍或入。---四舍五入;
- TRUNCATE(x,y)--->舍去y位后的数。---截断;
- SQRT---开方,开根号;
- AVG();
三角函数:
其中参数都是弧度---弧度和角度的转换--->RADIANS(x)---角度转换为弧度;DEGREES(x)---弧度转换为角度
- SIN(x)
- COS(x)
- TAN(x)
- ACOS(x)
- ASIN(x)
- ATAN(x)
- ATAN2(m,n)
- COT(x)
指数和对数:
- POW、POWER--->指数;
- EXP(x)--->e为底,x为指数;
- LN(x)、LOG(x);
进制的转换:
- BIN()---二进制;
- HEX()---十六进制;
b.字符串函数:
- ASCII:只看第一位;
- CHAR_LENGH:字符长度;LENGH:字节长度;
- CONCAT:连接字符(段)、CONCAT_WS(...)参数里的第一个字符串是用来连接后面的字符串的;
- INSERT(原字符串,首位索引(这里的索引是从1开始,分页的时候从0开始),偏移量,插入的字符串)
- REPLACE(原字符串,需要替换的字符串部分,替换进去的字符串部分)
- LEFT(字符串,取左边的x个)、RIGHT(字符串,取右边的x个)
- LPAD(str,补成x位,用'...'这个字符串来在左侧补充)---右对齐、RPAD(str,补成x位,用'...'这个字符串来在右侧补充)---左对齐;
- LTRIM、RTRIM:去除字符串左、右侧的空格。TRIM(s):去除字符串左侧和右侧的空格;TRIM('s1' FROM 's'):去除字符串s中首尾的s1;
- REPLACE(str,n):重复n次;
- LOCATE:找到首次出现的位置;
- ELT:返回指定位置的字符串;
- NULLIF(str1,str2)---如果str1=str2,就返回NULL,如果不相等,就返回str1;
c.日期和时间函数:
获取日期和时间:
- CURDATE()、CURRENT_DATE()、CURRENT_TIME()、CURTIME()、NOW()、UTC_DATE、UTC_TIME;
日期和时间戳的转换:
- 转换成毫秒;
- UNIX_TIMESTAMP();
获取月份、星期、星期数、天数:
- YEAR()、MONTH()、DAY()、HOUR()、MINUTE()、SECOND()、DATENAME()
日期的格式化和解析:
- DATE_FORMAT(date,fmt)---fmt一般是'%Y-%M-%D'、TIME_FORMAT(date,fmt)---fmt一般是'%H:%m:%s'
- 解析:STR_TO_DATE(str)
d.流程控制函数:
- IF(value,value1,value2)---如果value为true则返回value1,否则返回value2;
- IFNULL(value1,value2)---如果value1为true则返回value1,否则返回value2;
- CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 条件2...(ELSE)...END(...)(别名)
- CASE (expr)---表达式 WHEN 常量1 THEN 常量1 WHEN 常量2 THEN 常量2...
- 查询自带循环;
e.加密与解密:
- PASSWORD(str):将str加密,返回一串随机字符串;加密结果不可逆---MySQL8.0不推荐使用;
- MD5(str):加密结果不可逆;
- SHA(str):更安全,加密结果不可逆;
- ENCODE()、DECODE()---8.0中不可用,加密解密;
f.信息函数:
- VERSION()、CONNECTION_ID()、USER()、DATABASE()...
g.其他函数:
- FORMAT()---四舍五入保留到小数点后n为位;
- CONV(value,m,n):进制转换,从m到n;
(2).聚合函数:
输入的是一组数据的集合,输出的是单个值;不可以嵌套;
- AVG()
- SUM()
- MAX()
- MIN()
- COUT()
- GROUP BY:根据某个条件进行分组,如果有多个条件则是某个条件中另一个情况的所有都返回出来;其中非主函数的字段必须出现在GROUP BY中,反之不一定;写在FROM、WHERE后面,LIMIT后面;
- GROUP BY中使用WITH ROLLUP--把所有组的数据执行组函数-->不可以参与排序;
- HAVING:也是用来过滤数据的(WHERE),但是一般和GROUP BY相关;
- 如果过滤条件中出现了组(聚合)函数,那么就不能用WHERE,得用HAVING,并且放在GROUP BY后面;当过滤条件时没有聚合函数时,则此过滤条件可以申明在WHERE和HAVING里,但是尽量写在WHERE里---效率更高。
- HAVING和WHILE的对比:(1).HAVING适用范围更广;(2).WHERE效率更快,先筛选后连接,HAVING先连接后筛选;
- SQL语句的执行顺序:FROM---WHERE---JOIN...ON---GROUP BY---HAVING---SELECT---ORDER BY---LIMIT;