MySQL之函数

函数


1.函数分为:

①:内置函数:系统内置的通用函数。

②:自定义函数:跟据自己的要求编写的

从实现的功能角度:

①数值函数

②字符串函数

③日期和时间函数

④流程控制函数

⑤加密函数

⑥解密函数

⑦获取MySQL信息函数

⑧聚合函数

不同DBMS函数的差异:DBMS之间的差异性很大,远大于同一个语言不同版本之间的差异。这就意味着采用SQL函数的可移植性很差。

1.单行函数

1.操作数据对象

2.接收参数返回一个结果

3.只对一行进行变换

4.每行返回一个结果

5.可以嵌套

6.参数可以是一列或一个值

1.数值型函数

2.字符串类型的函数

注意:SQL中字符串的索引从1开始

3.日期和时间类型的函数
3.1获取日期和时间

3.2日期和时间戳的转换

3.3获取月份,星期,星期数,天数等

3.4日期操作函数

3.5时间和秒钟的转换函数

3.6计算日期和时间的函数

3.7日期的格式化与解析

日期的格式化与解析 格式化:日期--->字符串 解析:字符串--->日期

4.流程控制函数

流程处理函数可以跟据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的条件选择。MySQL中的流程处理函数主要包括IF() , IFNULL()和CASE()函数

5.加密与解密函数

加密与解密函数主要用于对数据库中的数据进行加密与解密处理,以防被他人所窃取。

这些函数在保证数据库安全时非常有用。

6.与MySQL有关的函数

2.多行函数(聚合函数)

1.聚合函数类型

1,AVG()

2.SUM()

3.MAX()

4.MIN()

5.COUNT()

1.SUM()/AVG()

当查询的字段中出现NULL值时会自动过滤

只适用于数值类型的字段(或变量) SELECT SUM(last_name),AVG(last_name) FROM employees;

2.MAX()/MIN()

当查询的字段中出现NULL值时会自动过滤

适用于数值类型,字符串类型,日期时间类型的字段(或变量) SELECT MAX(last_name),MIN(last_name) FROM employees;

3.count()

作用:计算指定字段在查询结构中出现的个数 SELECT COUNT(employee_id),COUNT(salary), COUNT(1),COUNT(*) FROM employees;

1.当查询的字段中出现NULL值时会自动过滤 SELECT COUNT(commission_pct) FROM employees;

2.结论:AVG=SUM/COUNT SELECT AVG(commission_pct), SUM(commission_pct)/COUNT(commission_pct) avg1, SUM(commission_pct)/107 FROM employees;

4.GROUP BY(分组函数)

1.可以使用GROUP BY子句将表中数据分成若干组 SELECT department_id,AVG(salary),SUM(salary) FROM employees GROUP BY department_id;

SELECT job_id,AVG(salary),SUM(salary) FROM employees GROUP BY job_id;

使用多个列分组 SELECT job_id,department_id,AVG(salary),SUM(salary) FROM employees GROUP BY job_id,department_id; #或者写作 SELECT department_id,job_id,AVG(salary),SUM(salary) FROM employees GROUP BY department_id,job_id;

2.SELECT中出现的非组函数的字段必须声明在GROUP BY中

反之GROUP BY中声明的字段可以不出现在SELECT中

#错误的写法 SELECT job_id,department_id,AVG(salary) FROM employees GROUP BY department_id;

3.GROUP BY中使用WITH ROLLUP

使用WITH ROLLUP关键字之后,在所有查询出的分组记录之后增加一条记录,

该记录计算查询出的所有记录的总和,即统计记录数量。

SELECT department_id,AVG(salary) FROM employees GROUP BY department_id WITH ROLLUP;

5.HAVING的使用

要求1:如果过滤条件中使用了聚合函数,则必须使用HAVING来替换WHERE,否则报错

要求2:HAVING必须声明在GROUP BY的后面

①行已经被分组

②使用了聚合函数

③满足HAVING子句中条件的分组将被显示

④HAVING不能单独使用,必须要跟GROUP BY一起使用

SELECT department_id,MAX(salary) FROM employees WHERE department_id IN (10,20,30,40) GROUP BY department_id HAVING MAX(salary)>10000;

WHERE与HAVING对比

1.WHERE可以直接使用表中的字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件;HAVING必须要与GROUP BY配合使用。可以使用分组中的计算函数和分组字段作为筛选条件。

2.如果需要通过连接从关联表中获取需要的数据,WHERE是先筛选后连接。而HAVING是先连接后筛选。WHERE执行效率高于HAVING

6.SQL底层执行原理

1.SQL92语法

SELECT...,...,(存在聚合函数)

FROM...,...,...

WHERE 多表连接条件 AND 不包含聚合函数的过滤条件

GROUP BY...,...

HAVING 包含聚合函数的过滤条件

ORDER BY ...,...(ASC/DESC)

LIMIT ...,...

2.SQL99语法

SELECT...,...,(存在聚合函数)

FROM... (LEFT/RIGHT)JOIN ... ON ...

(LEFT/RIGHT)JOIN... ON ...

WHERE 不包含聚合函数的过滤条件

GROUP BY...,...

HAVING 包含聚合函数的过滤条件

ORDER BY ...,...(ASC/DESC)

LIMIT ...,...

SQL语句的执行过程:

FROM---->ON---->(LEFT/RIGHT JOIN)---->WHERE---->GROUP BY---->HAVING---->SELECT---->DISTINCT---->ORDER BY---->LIMIT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值