单行函数:
-
操作数据对象
-
接受参数返回一个结果
-
只对一行进行变换
-
每行返回一个结果
-
可以嵌套
-
参数也可以是一列或一个值
数值函数
基本函数:
注:ROUND(x,y)函数的y是负数时,即往高位进行四舍五入,如-3就是按百位进行四舍五入(如ROUND(12767,-3)的结果为13000)。TRUNCATE与ROUND的区别是:
-
TRUNCATE是直接取y位小数,不进行四舍五入。
-
TRUNCATE没有单参数的函数,必须传入操作数和截断的小数位 。
-
TRUNCATE(12767,-3)的结果是12000。
三角函数
由于参数要代入的是弧度值,所以经常要用到角度和弧度的运算的函数:
指数和对数:
进制间的转换:
字符串函数:
注:在MySQL中,字符串的索引是从1开始的。
日期和时间函数:
获取日期时间:
日期与时间戳的转换:
获取月份、星期、星期数、天数等函数:
日期的操作函数:
时间和秒钟转换的函数
计算日期和时间的函数:
注:加减组合型类型时要用字符串,并将要组合的两个元素用_隔开。例如:
SELECT DATE_ADD(NOW(),INTERVAL '2_2' YEAR_MONTH)
FROM DUAL;
注:ADDTIME的时间也可以用'时:分:秒'表示,例如:
SELECT ADDTIME(NOW( ),'2:2:2')
FROM DUAL;
日期的格式化与解析:
格式化:日期 ——》字符串
解析:字符串 ——》日期
格式化的格式符:
流程控制函数:
流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的条件选择。MySQL中的流程处理函数主要包括IF( )、IFNULL( )、CASE( )函数。
加密与解密函数
加密与解密函数主要用于对数据库的数据进行加密和解密处理,以防止数据被他人窃取。
注:
PASSWORD/ENCODE/DECODE函数在MySQL8.0中开始被弃用,不能再使用PASSWORD/ENCODE/DECODE函数。
MD5和SHA函数都是不可逆的。
MySQL信息函数:
MySQL中内置了一些可以查询MySQL信息的函数,这些函数主要用于帮助数据库开发或运维人员更好地对数据库进行维护工作。
其他函数:
注:
FORMAT函数中n如果小于零,不会往高位去四舍五入保留,而是保留整数部分。
关于以点分割的IP地址和数字形式的IP地址:以“192.168.1.100”为例,数字形式是192乘以256的三次方,加上168乘以256的二次方,加上1乘以256的一次方,加上100乘以256的零次方。
聚合函数:
聚合函数(或聚集函数、分组函数)是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。
即作用于一组数据,并对一组数据返回一个值。
常见的几个聚合函数:
-
AVG( ):求平均值
-
SUM( ):求总和
-
MAX( ):求最大值
-
MIN( ):求最小值
-
COUNT( ):计算指定的字段在查询结果中查询的个数
注:AVG函数和SUM函数的参数只能代入数值类的数据的集合,因为非数值类的数据(比如字符串)的集合没有平均、总和的说法
MAX函数和MIN函数的参数可以代入数值类的数据的集合,也可以代入一些非数值类的数据(比如日期、字符串)的数据的集合,字符串可以按照ASCII码值按位比较的方式来比较大小。
以上函数在计算指定字段出现的个数时,都不会计算字段值为NULL的数据。
GROUP BY的使用
-
要对数据进行分组时,使用GROUP BY加上指定的字段作为分组的标准。
-
SELECT中出现的非组函数的字段(即不是出现在对分出来的每个组进行操作的函数中的字段)必须声明在GROUP BY中,GROUP BY中声明的字段不能出现在SELECT中。会出现冲突,比如,以工作职位分组,查询每个部门的平均工资,如果又要查询部门,但是每个工作职位的组中有不同的部门,就形成了冲突。(如果未分组即把所有的数据当作一个组,没有使用ORDER BY时的聚合函数也是组函数)
-
GROUP BY声明在FROM后面、WHERE后面。
例:要按工作职位和工作部门两个标准来排序
SELECT job , deptno , AVG(sal)
FROM emp
GROUP BY job , deptno
ORDER BY AVG(sal) DESC;
GROUP BY中使用WITH ROLLUP
-
使用WITH ROLLUP关键字后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有的记录的总和,即统计记录数量。
-
当使用WITH ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY是互相排斥的。
HAVING的使用:
-
HAVING的作用是用来过滤数据。
-
如果过滤条件中使用了聚合函数,则必须使用HAVING来替换WHERE。
-
HAVING必须声明在GROUP BY后面。
-
使用HAVING的情况是SQL中使用了GROUP BY。
-
如果过滤条件中有聚合函数,则此过滤条件必须声明在HAVING中。如果过滤条件中没有聚合函数,则此过滤条件声明在WHERE中或HAVING中都可以,建议声明在WHERE中,执行效率会更高。
SELECT执行顺序:
查询语句的代码的书写的顺序:
SELECT……FROM……WHERE……GROUP BY……HAVING……ORDER BY……LIMIT……
查询语句的执行顺序:
FROM……ON……JOIN……WHERE……GROUP BY……HAVING……SELECT的字段……DISTINCT……ORDER BY……LIMIT……