【DataBase】MySQL 27 函数

一、概述

函数 Function,存储过程的用途一致,减少程序逻辑,和数据库服务的连接次数,提高效率

简化操作,提高SQL重用性

函数 和 存储过程的区别?

 存储过程允许多个返回的数据,函数只允许一个返回数据

适用场景:

存储过程适合、批量插入、更新

函数适合处理数据后返回一个结果

二、语法 Syntax

创建函数

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

参数写法:

参数名 参数类型

语法注意

1、函数体必须要写上return语句

2、如果只有一条函数语句可以省略BEGIN & END

3、使用 DELIMITER 语句作为设置结束标记语句

调用语法

SELECT 函数名称(参数列表)

三、样例演示

1、无参数有返回

查询全部员工人数

DELIMITER $

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

调用:

# SELECT employeeCount();
SELECT employeeCount() AS '员工人数';

2、有参数有返回

根据员工名返回工资:

DELIMITER $
CREATE FUNCTION querySalaryByEmployeeName
(
employeeName VARCHAR(20)
)
 RETURNS DOUBLE

BEGIN
	# DECLARE salary DOUBLE DEFAULT 0;
	SET @salary = 0;
	
	SELECT 
		salary
	INTO 
		@salary
	FROM
		employees
	WHERE
		employees.`last_name` = employeeName;
	
	RETURN @salary;
END $

调用

SELECT querySalaryByEmployeeName('Kochhar') AS '工资';

根据部门名返回该部门平均工资:

DELIMITER $

CREATE FUNCTION queryAvgSalaryByDepartmentName
(
departmentName VARCHAR(20)
) 
RETURNS DOUBLE

BEGIN
	DECLARE avgSalary DOUBLE DEFAULT 0;
	
	SELECT 
		AVG(e.salary)
	INTO 
		avgSalary
	FROM
		employees e JOIN departments d ON e.department_id
	WHERE
		d.department_name = departmentName;
		
	RETURN avgSalary;
END $

 调用函数:

SELECT queryAvgSalaryByDepartmentName('IT') AS '平均工资';

四、函数的查看与删除

查看函数的语法:

SHOW CREATE FUNCTION 函数名称;

或者是直接找到系统进行查看:

mysql库 -> proc表

删除函数的语法:

DROP FUNCTION 函数名

修改和存储过程一样没有实际意义,不赘述了

 

posted @ 2020-11-04 10:03  emdzz  阅读(149)  评论(0编辑  收藏  举报