含义:一组预先编译好的SQL语句的集合,可以理解成批处理语句
优点:
(1)提高代码的重用性
(2)简化操作
(3)减少了编译次数并减少了和数据库服务器的连接次数,提高了效率
与存储过程的区别:
存储过程:可以有0个返回,也可以有多个返回。适合做批量插入、批量更新。
函数:有且仅有一个返回。适合做处理数据后返回一个结果。
语法:
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
函数体
END
<注>:
(1)参数列表包含两部分:参数名 参数类型
(2)函数体:一定有return语句,如果没有会报错
如果return语句没有放在函数体的最后也不报错,但不建议。
(3)函数体中如果仅有一句话,则可以省略begin end
(4)使用delimiter语句设置结束标记
语法:
SELECT 函数名(参数列表)
1、无参数有返回
eg1.返回公司的员工个数
DELIMITER $
CREATE FUNCTION myf1() RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0;
SELECT COUNT(*) INTO c
FROM employees;
RETURN c;
END $
SELECT myf1()$
2、有参数有返回
eg2.根据员工名返回他的工资
CREATE FUNCTION myf2(empname VARCHAR(20)) RETURNS DOUBLE
BEGIN
SET @sal=0;
SELECT e.salary INTO @sal
FROM employees AS e
WHERE e.last_name=empname;
RETURN @sal;
END $
SELECT myf2('Hunold')$
eg3.根据部门名,返回该部门的平均工资
CREATE FUNCTION myf3(depname VARCHAR(20)) RETURNS DOUBLE
BEGIN
DECLARE sal DOUBLE;
SELECT AVG(salary) INTO sal
FROM employees AS e
INNER JOIN departments AS d
ON e.`department_id`=d.`department_id`
WHERE d.`department_name`=depname;
RETURN sal;
END $
SELECT myf3('IT')$
SHOW CREATE FUNCTION 函数名;
DROP FUNCTION 函数名;
eg1.创建函数,实现传入两个float,返回二者之和
CREATE FUNCTION test1(num1 FLOAT,num2 FLOAT) RETURNS FLOAT
BEGIN
DECLARE SUM FLOAT DEFAULT 0;
SET SUM=num1+num2;
RETURN SUM;
END $
SELECT test1(3.14,1.55)$