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')$

 

posted @ 2020-07-30 20:40  意如柳  阅读(268)  评论(0编辑  收藏  举报