MySQL初级-20-函数

本文最后更新于:2020年7月28日 下午

mysql Ver 14.14 Distrib 5.5.62

文中案例所用数据库下载

20.1 含义

函数是一组预先编译并存储在数据库中的一段SQL语句的集合。

20.2 函数与存储过程的区别

存储过程可以有0个或多个返回值,适合执行SQL语句的批量插入和更新。

函数有且仅有1个返回值,适合用于处理数据后返回一个结果。

20.3 创建函数

20.3.1 语法

CREATE FUNCTION 函数名(参数名 参数类型) RETURNS 返回类型
BEGIN
	函数体
END

20.3.2 注意

  1. 函数体总能必须有RETURN语句,否则会报错。

  2. 若函数体仅有一句话,则可以省略BEGIN END。

  3. 使用DELIMITER语句设置结束标记。

    DELIMITER 结束标记

20.3.3 示例

20.3.3.1 无参数有返回

  1. 返回公司的员工个数。

    DELIMITER $
    CREATE FUNCTION fun1() RETURNS INT
    BEGIN
    	DECLARE num INT DEFAULT 0;
    	SELECT COUNT(*) INTO num
    	FROM employees;
    	RETURN num;
    	
    END $
    DELIMITER ;

20.3.3.2 有参数有返回

  1. 根据员工名,返回TA的工资。

    DELIMITER $
    CREATE FUNCTION fun2(eName VARCHAR(20)) RETURNS DOUBLE
    BEGIN
    	DECLARE sal DOUBLE;
    	SELECT e.salary INTO sal
    	FROM employees e
    	WHERE e.last_name=eName;
    	RETURN sal;
    	
    END $
    DELIMITER ;
  1. 根据部门名,返回该部门的平均工资。

    #方法一
    DELIMITER $
    CREATE FUNCTION fun3(depName VARCHAR(20)) RETURNS DOUBLE
    BEGIN
    	DECLARE sal DOUBLE;
    	SELECT AVG(e.salary) INTO sal
    	FROM employees e
    	INNER JOIN departments d
    	ON e.department_id=d.department_id
    	GROUP BY d.department_name
    	HAVING d.department_name=depName;
    	RETURN sal;
    	
    END $
    DELIMITER ;
    #方法二
    DELIMITER $
    CREATE FUNCTION fun4(depName VARCHAR(20)) RETURNS DOUBLE
    BEGIN
    	DECLARE sal DOUBLE;
    	SELECT AVG(e.salary) INTO sal
    	FROM employees e
    	INNER JOIN departments d
    	ON e.department_id=d.department_id
    	WHERE d.department_name=depName;
    	RETURN sal;
    	
    END $
    DELIMITER ;

20.4 调用函数

SELECT 函数名(参数列表)

20.5 查看函数

SHOW CREATE FUNCTION 函数名;

20.6 删除函数

DROP FUNCTION 函数名;

版权声明:自由转载-非商用-非衍生-保持署名 Creative Commons BY-NC-ND 3.0 协议,转载请注明出处!

 目录