#函数 function
含义:一组预先编译好的SQL语句的集合,理解成批处理语句
1.提高代码的重用性
2.简化操作
3.减少了编译次数并且减少了和数据服务器的连接次数,提高了效率
区别:
存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新
函数:有且仅有1 个返回,合适做处理数据后返回一个结果 做查询一个值
#一、创建语法
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
函数体
END
注意:
1.参数列表包含两部分:参数名 参数类型
2.函数体:肯定会有return语句,如果没有会报错
如果return语句放在函数的最后也不报错,但不建议
return 值;
3.函数题中仅有一句话,则可以省略begin end
4.使用 delimter语句设置结束标记
#二、调用语法
SELECT 函数名(参数列表)
执行函数中所有语句 函数中有显示的语句他也能显示 有插入修改也能做,执行完把显示值返回出来
#二、函数案例演示
#1、无参有返回
#案例:返回公司的员工个数
CREATE FUNCTION myf1() RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0;#定义局部变量
SELECT COUNT(*) INTO c #赋值与c
FROM employees;
RETURN c;
END $
#调用函数
SELECT myf1()$
#2、有参有返回
#案例1:根据员工名,返回它的工资
CREATE FUNCTION myf2(empName VARCHAR(10)) RETURNS DOUBLE
BEGIN
DECLARE salary DOUBLE DEFAULT 0;#定义局部变量
SELECT e.`salary` INTO salary #为局部变量赋值
FROM employees e
WHERE e.`last_name`=empName;
RETURN salary;
END $
#删除函数
DROP FUNCTION myf2;
#调用函数
SELECT myf2('kochhar')$
#同时也可定义用户变量 set @sal=0;
#案例2.根据部门名,返回该部门的平均工资
CREATE FUNCTION myf3(depName VARCHAR(20)) RETURNS DOUBLE
BEGIN
DECLARE ag DOUBLE DEFAULT 0;#定义局部变量并初始化
SELECT AVG(salary) INTO ag #为局部变量赋值
FROM employees e
INNER JOIN departments d
ON e.`department_id`=d.`department_id`
WHERE d.`department_name`=depname
GROUP BY d.department_id;
RETURN ag;
END $
#调用函数
SELECT myf3('adm')$
#三、查看函数
SHOW CREATE FUNCTION myf3;
#四、删除函数
DROP FUNCTION myf2;
#案例一、创建函数,实现传入两个float,返回二者之和
CREATE FUNCTION test_fu1(num1 FLOAT,num2 FLOAT) RETURNS FLOAT
BEGIN
DECLARE `sum` FLOAT DEFAULT 0;
SET `sum`=num1+num2;
RETURN `sum`;
END $
#调用
SELECT test_fu1(12,18)$