一、函数是什么:
- 概念:将一组逻辑语句封装在方法体内,对外暴露方法名
- 好处:隐藏实际细节;提高代码重用性(即:不用重新写逻辑语句,调用函数就行)
- 调用:select 函数名(实参列表) from 表;
- 特点:1.叫什么(函数名);2.干什么(函数功能)
- 分类:
![8a2ee8e6acd534971a9b686f9dc29ece.png](https://i-blog.csdnimg.cn/blog_migrate/74c0d0040d2e8bf7172f184ee9c645a9.png)
二、文本处理函数
- 说明:用于处理文本字符串(如删除/填充值、转换为大写或小写)的文本函数
1. 查看字符串的长度、拼接多个字符串、替换部分字符串、改变字符串大小写
![9c6fb3859cba2f134a887aefb118007e.png](https://i-blog.csdnimg.cn/blog_migrate/ae8519ebfa27330f3a884ed152007f68.jpeg)
2. 根据索引截取字符串、根据字符串返回索引
![a933305881502efc6ad5dc750c6832ec.png](https://i-blog.csdnimg.cn/blog_migrate/169ffd44be02ce0143612e292c192a11.jpeg)
3. 删除字符串前缀或后缀的部分字符串/空格
![59701217750b748c3986192538424e88.png](https://i-blog.csdnimg.cn/blog_migrate/1964e7f820c0594747c441e615df9d61.jpeg)
4. 填充字符串至指定长度、返回指定长度的字符串
![9032f93ad11e74f2b7f4927b640f8de0.png](https://i-blog.csdnimg.cn/blog_migrate/052ba35b0255d968f3c387a9a91c6228.jpeg)
三、数值处理函数
- 说明:用于在数值数据上进行算数操作(如返回绝对值,进行代数计算)的数值函数
1. 将数值四舍五入/截断至指定位数
![eb2f506d83baf2433c76d186c9c37bc9.png](https://i-blog.csdnimg.cn/blog_migrate/a5fbdb1696aa75b69178aa454a2dd26d.jpeg)
2. 向上/向下取整,求余数
![d600b60a8e24f559fce5eff7c1da3606.png](https://i-blog.csdnimg.cn/blog_migrate/a5db486a9fd159e1895052a4a79fd625.png)
四、日期和时间处理函数
- 说明:用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期之的差,检查日期有效性)的日期和时间函数
1. 返回当前日期和时间、日期、时间
![560c65c388da19c1ee55e5bb0b31ef11.png](https://i-blog.csdnimg.cn/blog_migrate/49721ca5d3a48940d563c6c71fe4518d.png)
年、月、日、小时、分钟、秒的格式符:
![a94db4820f9aa5332bf0bdfb06d77fcf.png](https://i-blog.csdnimg.cn/blog_migrate/fae576633f1fad50be88e1e5336c7d86.png)
2. 将日期与字符通过格式符进行转换
![be2c1d441748458f4741b96f31af5907.png](https://i-blog.csdnimg.cn/blog_migrate/132ae35b2e3f9e6134ce880ac14b258f.jpeg)
3. 两个日期相隔天数
![5b4d41f6e7b2ffa8bd2982b19e60d734.png](https://i-blog.csdnimg.cn/blog_migrate/7107f3a803afb64b52b290371f5a421d.png)
4. 提取部分日期或时间
![e79555aca33dca5ba56bb880bb24e51e.png](https://i-blog.csdnimg.cn/blog_migrate/8e5d62410176cfbd71c9d20f8af56249.jpeg)
五、分组函数(聚集函数)
- 说明:当需要表中数据的汇总信息,而不需要检索出原始数据本身时使用
- 用途:用于计算表中某些行的和;找出某列(所有行/特定行)的最大值、最小值、平均值;确定表中行数(或者满足特定条件的行数)
1. 函数说明:
![72dcf263e113539983729eb21a8590a6.png](https://i-blog.csdnimg.cn/blog_migrate/df538ad6daa9ea65efe2eeacd27c65fd.png)
2. 函数实例:
例1:查询员工的工资总和、工资的平均值、最高值、最低值,以及表的行数和工资列的行数
![0db8efa9e9047e421b0fed293f6b4654.png](https://i-blog.csdnimg.cn/blog_migrate/30d846a5743bafdf907defbd9886c0cc.png)
![5313badbf51d7fc8901d06a2a60ec786.png](https://i-blog.csdnimg.cn/blog_migrate/baaf026e3887185499a9a65f4a926a67.png)
3. 分组函数与distinct结合使用:
- 说明:分组函数与distinct结合,可用于对数据中的不同值进行汇总
例2:汇总员工不相同工资的总和、均值、行数 VS 汇总员工全部的工资的总和、均值、行数
![9e9ed7c23279839664d1beb2e2300bc6.png](https://i-blog.csdnimg.cn/blog_migrate/80ba3ac1363afdb96b4ea91c5ca72c19.png)
![a6546375d06b9fe316538239e454b948.png](https://i-blog.csdnimg.cn/blog_migrate/c97e8dbed1e1347a4c849546552487d4.png)
4. count(*)函数的拓展说明:
(1) 统计表的行数的两种方式:
- SELECT COUNT(*) FROM employees;
- SELECT COUNT(1) FROM employees;(相当于再建一列,列值均为1)
(2) 执行效率对比:
- MYISAM存储引擎下,count(*)的效率最高
- INNODB存储引擎下,count(*)和count(1)的效率差不多,比count(字段)要高一些
- 综上,一般用count(*)统计行数
六、流程控制函数
1. if函数:条件判断函数
语法:if(判断条件, 条件成立时返回的值, 条件不成立时返回的值)
例3:如果员工的奖金率为空值显示为0,否则显示表格中的奖金率
![f81fc4aeb68eafe1c300c60731f10556.png](https://i-blog.csdnimg.cn/blog_migrate/ae3a1b5e0e7fbbad0dde8476ee072c39.png)
![138f1c84b2403d0a897e53808071d1f2.png](https://i-blog.csdnimg.cn/blog_migrate/53badddd74b0c0db34323403c6231cf1.png)
IFNULL( expr1,expr2 ):判断expr1是否为NULL,不为空返回expr1,为空返回expr2
2. case函数:
(1) 第一个作用:判断一个条件
语法:
case 判断字段/表达式/变量
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
……
else 要显示的值n或语句n
end
例4:查询员工的工资:部门号=30,显示工资为1.1倍;部门号=40,显示的工资为1.2倍;部门号=50,显示的工资为1.3倍;其他部门显示原工资
![a70110097f503ea118a2b8581c6ccf2b.png](https://i-blog.csdnimg.cn/blog_migrate/d65fff59f35ba646fb6844368e61df69.png)
![1b85fbee9c4b50033bfbfd8019bd05ee.png](https://i-blog.csdnimg.cn/blog_migrate/434192652a8de83345cdeb9d9fe2a0f1.png)
(2) 第二个作用:判断多个条件(类似于多重if )
语法:
case
when 条件1 then 要显示的值1或者语句1
when 条件2 then 要显示的值2或者语句2
……
else 要显示的值n或语句n
end
例5:查询员工的工资:如果工资大于两万,显示A级别;如果工资大于15000,显示B级别;如果工资大于一万,显示C级别;否则显示D级别
![a8274554ddea3722238739c5b57ebed8.png](https://i-blog.csdnimg.cn/blog_migrate/7317aaa8f5f1713f074bfe4c7e557c74.png)
![2fdb7ee45e89524138062162020097cc.png](https://i-blog.csdnimg.cn/blog_migrate/968600d1c39380ba025e40ff61fb63dd.png)