函数(function)作为数据库的一个对象,是独立的程序单元(以后再研究怎么定义),每个数据库都会在SQL 标准上扩展一些函数。

函数可以放在SQL 语句的各个位置,常用的位置是select和where子句中。

一、函数分类

根据对多行数据的处理方式:单行函数、多行函数。

1)、单行函数对每行输入值单独计算,每行得到一个计算结果返回给用户;

2)、多行函数对多行输入值整体计算,最后只会得到一个结果。

单行函数分类:字符函数、数值函数、时间日期函数、转换函数、其它函数。

说明:

1)、转换函数主要完成类型转换;

2)、其它函数又大致分为位函数、流程控制函数、加密解密函数、信息函数几类。

单行函数分类与MySQL 数据类型大致分为字符型、数值型、时间日期型相对应!


二、常用函数

1、MySQL 提供几个处理null的函数

1)、ifnull(expr1,expr2):如果expr1不为null,则返回expr1,否则返回expr2;

2)、nullif(expr1,expr2):expr1与expr2相等,则返回null,否则返回expr1;

3)、if(expr1,expr2,expr3):类似于三目运算符,expr1为true,返回expr2,否则返回expr3;

4)、isnull(expr1):判断expr1是否为null,expr1为null,返回true,否则返回false。

2、MySQL case函数

CASE 函数是一个流程控制函数,作用同c++中switch语句。有如下两种使用方法:

1)、用值比较

case value

when compareValue1 then result1

when compareValue2 then result2

……

else result

end

用value依次与各compareValue比较,相等则返回对应的result,并退出case函数。

2)、用条件判断

case


when condition1 then result1

when condition2 then result2

……

else result

end

各condition都为布尔表达式,从上到下判断,为true则返回对应的result,并退出case函数。

使用示例:

SELECT student_name,CASE

WHEN student_id<3 THEN ‘初级班’

WHEN student_id<=6 THEN '中级班'

ELSE ‘高级版'

END

FROM student_table;

说明:上面语句选择student_name与student_id两列,只是student_id用CASE 函数替换为对应的文字说明。

3、部分时间日期函数

1)、CURTIME():返回完整的时间类型值,如:’2016-08-10 22:13:30‘;

2)、CURDATE():返回当前日期,时间部分为0,如:’2013-08-10 00:00:00‘;

3)、ADDTIME(time1,time2):time1为time或datetime表达式,time2为time表达式,如:

addtime(’2016-08-10 22:20:00‘,’10:10:10')返回2016-08-11 08:30:10;

addtime(’2016-08-10 22:20:00‘,’1 10:10:10')返回2016-08-12 08:30:10;

addtime(’22:20:00‘,’10:10:10')返回32:30:10,所以只有时分秒时应注意相加后的值是否大于23:59:59!

注:上面的参数值都可带微秒[.xxxxxx]。


三、常用分组和组函数

常用组函数:

注:distinct:区别的。指定计算是否包含所有重复值。

1、avg([distinct|all]expr):计算多行expr的平均值,其中expr可以是变量、常量或数据列,但其类型必须是数值型;

2、count(*|[distinct|all]expr):计算多行的记录数。expr同上,但数据类型可以是任意类型;

3、max(expr):计算多行expr的最大值,expr同count中;

4、min(expr);

5、sum([distinct|all]expr):计算多行expr的总和,expr可以是变量、常量或数据列,但数据类型必须是数值型。

示例:

mysql 函数结果集 mysql数据函数_数据类型

注:对于可能为null的列,可使用ifnull函数处理:avg(ifnull(columnName,0))。


group by 分组与having过滤:

语法:

#查询结果按分组列不重复的显示。

select * from tableName group by columnName1[,columnName2,……];

说明:对于MySQL 如果被分组的列对应的其它列有多个对应值,则只显示第一条记录的值。如:

mysql 函数结果集 mysql数据函数_单行函数_02

结果id列只显示第一条记录的值,即5。

如需对分组进行过滤,则应在group by子句后使用having子句,having后接一个条件表达式,只有满足条件的分组才会被查询出来。例(表同上):

mysql 函数结果集 mysql数据函数_单行函数_03

注意:where只用于过滤行,不能在where子句中过滤组和使用组函数。having可用于过滤组,也可使用组函数。




0


函数(function)作为数据库的一个对象,是独立的程序单元(以后再研究怎么定义),每个数据库都会在SQL 标准上扩展一些函数。

函数可以放在SQL 语句的各个位置,常用的位置是select和where子句中。

一、函数分类

根据对多行数据的处理方式:单行函数、多行函数。

1)、单行函数对每行输入值单独计算,每行得到一个计算结果返回给用户;

2)、多行函数对多行输入值整体计算,最后只会得到一个结果。

单行函数分类:字符函数、数值函数、时间日期函数、转换函数、其它函数。

说明:

1)、转换函数主要完成类型转换;

2)、其它函数又大致分为位函数、流程控制函数、加密解密函数、信息函数几类。

单行函数分类与MySQL 数据类型大致分为字符型、数值型、时间日期型相对应!


二、常用函数

1、MySQL 提供几个处理null的函数

1)、ifnull(expr1,expr2):如果expr1不为null,则返回expr1,否则返回expr2;

2)、nullif(expr1,expr2):expr1与expr2相等,则返回null,否则返回expr1;

3)、if(expr1,expr2,expr3):类似于三目运算符,expr1为true,返回expr2,否则返回expr3;

4)、isnull(expr1):判断expr1是否为null,expr1为null,返回true,否则返回false。

2、MySQL case函数

CASE 函数是一个流程控制函数,作用同c++中switch语句。有如下两种使用方法:

1)、用值比较

case value

when compareValue1 then result1

when compareValue2 then result2

……

else result

end

用value依次与各compareValue比较,相等则返回对应的result,并退出case函数。

2)、用条件判断

case


when condition1 then result1

when condition2 then result2

……

else result

end

各condition都为布尔表达式,从上到下判断,为true则返回对应的result,并退出case函数。

使用示例:

SELECT student_name,CASE

WHEN student_id<3 THEN ‘初级班’

WHEN student_id<=6 THEN '中级班'

ELSE ‘高级版'

END

FROM student_table;

说明:上面语句选择student_name与student_id两列,只是student_id用CASE 函数替换为对应的文字说明。

3、部分时间日期函数

1)、CURTIME():返回完整的时间类型值,如:’2016-08-10 22:13:30‘;

2)、CURDATE():返回当前日期,时间部分为0,如:’2013-08-10 00:00:00‘;

3)、ADDTIME(time1,time2):time1为time或datetime表达式,time2为time表达式,如:

addtime(’2016-08-10 22:20:00‘,’10:10:10')返回2016-08-11 08:30:10;

addtime(’2016-08-10 22:20:00‘,’1 10:10:10')返回2016-08-12 08:30:10;

addtime(’22:20:00‘,’10:10:10')返回32:30:10,所以只有时分秒时应注意相加后的值是否大于23:59:59!

注:上面的参数值都可带微秒[.xxxxxx]。


三、常用分组和组函数

常用组函数:

注:distinct:区别的。指定计算是否包含所有重复值。

1、avg([distinct|all]expr):计算多行expr的平均值,其中expr可以是变量、常量或数据列,但其类型必须是数值型;

2、count(*|[distinct|all]expr):计算多行的记录数。expr同上,但数据类型可以是任意类型;

3、max(expr):计算多行expr的最大值,expr同count中;

4、min(expr);

5、sum([distinct|all]expr):计算多行expr的总和,expr可以是变量、常量或数据列,但数据类型必须是数值型。

示例:

mysql 函数结果集 mysql数据函数_数据类型

注:对于可能为null的列,可使用ifnull函数处理:avg(ifnull(columnName,0))。


group by 分组与having过滤:

语法:

#查询结果按分组列不重复的显示。

select * from tableName group by columnName1[,columnName2,……];

说明:对于MySQL 如果被分组的列对应的其它列有多个对应值,则只显示第一条记录的值。如:

mysql 函数结果集 mysql数据函数_单行函数_02

结果id列只显示第一条记录的值,即5。

如需对分组进行过滤,则应在group by子句后使用having子句,having后接一个条件表达式,只有满足条件的分组才会被查询出来。例(表同上):

mysql 函数结果集 mysql数据函数_单行函数_03

注意:where只用于过滤行,不能在where子句中过滤组和使用组函数。having可用于过滤组,也可使用组函数。