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;