zoukankan      html  css  js  c++  java
  • 【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 函数名

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

  • 相关阅读:
    poj 1088 滑雪
    位运算与bitset
    hdu 4607 Park Visit
    树的直径
    codeforces 495D Sonya and Matrix
    German Collegiate Programming Contest 2015(第三场)
    BAPC 2014 Preliminary(第一场)
    Benelux Algorithm Programming Contest 2014 Final(第二场)
    E. Reachability from the Capital(tarjan+dfs)
    poj2104 K-th Number(划分树)
  • 原文地址:https://www.cnblogs.com/mindzone/p/12807810.html
Copyright © 2011-2022 走看看