• 【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 函数名

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

  • 相关阅读:
    LIS例题
    基数排序板子
    lower_bound和upper_bound在刷leetcode的时候...
    leetcode1081/316 求字典序最小的包含所有出现字符一次的子序列
    PHP 求多个数组的笛卡尔积,适用于求商品规格组合 【深度优先搜索】【原创】
    PHP 求多个数组的笛卡尔积,适用于求商品规格组合【原创】
    Spring 中注入 properties 中的值
    Java 枚举活用
    Intellij IDEA 快捷键整理(TonyCody)
    WIN API -- 2.Hello World
  • 原文地址:https://www.cnblogs.com/mindzone/p/12807810.html
Copyright © 2020-2023  润新知