lyt经典版MySQL基础——函数
1 #函数 2 /* 3 函数:类似于java中的方法 4 好处: 5 1、提高代码的重用性 6 2、简化操作 7 8 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 9 1、提高代码的重用性 10 2、简化操作 11 3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 12 13 区别: 14 存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新 15 函数:有且仅有1个返回,适合做处理数据后返回一个结果 16 */ 17 18 #一、创建语法 19 CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型 20 BEGIN 21 函数体 22 END 23 /* 24 注意: 25 1.参数列表 包含两部分: 26 参数名 参数类型 27 28 2.函数体:肯定会有return语句,如果没有会报错 29 如果return语句没有放在函数体的最后也不报错,但不建议 30 31 return 值; 32 33 3.函数体中仅有一句话,则可以省略begin end 34 4.使用delimiter语句设置结束标记 35 */ 36 37 #二、调用语法 38 SELECT 函数名(参数列表) 39 40 #---------------------案例演示------------------------ 41 #1.无参有返回 42 #案例:返回公司的员工个数 43 DELIMITER $ 44 CREATE FUNCTION myf1() RETURNS INT 45 BEGIN 46 DECLARE c INT DEFAULT 0; #定义局部变量 47 SELECT COUNT(*) INTO c #赋值 48 FROM employees; 49 RETURN c; 50 END $ 51 52 SELECT myf1()$ 53 54 #2.有参有返回 55 #案例1:根据员工名,返回他的工资 56 DELIMITER $ 57 CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE 58 BEGIN 59 SET @sal=0; #定义用户变量 60 SELECT salary INTO @sal #赋值 61 FROM employees 62 WHERE last_name=empName; 63 RETURN @sal; 64 END $ 65 66 SELECT myf2('kochhar') $ 67 68 #案例2:根据部门名,返回该部门的平均工资 69 DELIMITER $ 70 CREATE FUNCTION myf3(deptName VARCHAR(20)) RETURNS DOUBLE 71 BEGIN 72 DECLARE sal DOUBLE; 73 SELECT AVG(salary) INTO sal 74 FROM employees e JOIN departments d ON e.department_id=d.department_id 75 WHERE department_name=deptName; 76 RETURN sal; 77 END $ 78 79 SELECT myf3('IT')$ 80 81 #三、查看函数 82 SHOW CREATE FUNCTION myf3; 83 84 #四、删除函数 85 DROP FUNCTION myf3; 86 87 #案例 88 #1、创建函数,实现传入两个float,返回二者之和 89 DELIMITER $ 90 CREATE FUNCTION myef1(a FLOAT,b FLOAT) RETURNS FLOAT 91 BEGIN 92 DECLARE c FLOAT DEFAULT 0; 93 SET c=a+b; 94 RETURN c; 95 END $ 96 97 SELECT myef1(1.1,1.2)$ 98 #2、创建函数,实现传入工种名,返回该工种的员工人数 99 DELIMITER $ 100 CREATE FUNCTION myef2(jobName VARCHAR(20)) RETURNS INT 101 BEGIN 102 DECLARE c INT DEFAULT 0; 103 SELECT COUNT(*) INTO c 104 FROM employees e JOIN jobs j ON e.job_id=j.job_id 105 WHERE job_title=jobName; 106 RETURN c; 107 END $ 108 109 SELECT myef2('Programmer')$ 110 #3、创建函数,实现传入员工名,返回该员工的领导名 111 DELIMITER $ 112 CREATE FUNCTION myef3(empName VARCHAR(30)) RETURNS VARCHAR 113 BEGIN 114 SET @mname='abc'; 115 SELECT m.last_name INTO @mname 116 FROM employees m JOIN employees e 117 ON e.manager_id=m.employee_id 118 WHERE e.last_name=empName; 119 RETURN @mname; 120 END $ 121 122 SELECT myef3('K_ing')$
每天进步一点点,快乐生活多一点。