SQL 函数
1. 定义
编程之家解释:可以把经常使用的封装起来,以便需要的时候直接。
本小节,我们将一起学习 。
2. 前言
我们在学习编程语言时候,也会遇到,在 中也是如此,如果你熟悉 Python 或者其它语言,那么一定使用过print
这个内置。 为了给开发者提供便利,也提供了一系例的内置,它们大致可分为算术
、字符串
、日期
、转换
和聚合
五大类。
除了提供好用的内置外,还可以通过 Create 指令来新建。个小节中,我们会简单的介绍的创建和使用,而内置我们将在后面的几个小节中详细介绍。
本小节测试数据如下,请先在中执行:
DROP TABLE IF EXISTS imooc_user;CREATE TABLE imooc_user( id int PRIMARY KEY, username varchar(), age int);INSERT INTO imooc_user(id,username,age)VALUES (,'peter',),(,'pedro',),(,'jerry',),(,'mike',),(,'tom',);
3. 语法
是一组 语句的封装,因此它的创建是颇为复杂的,大致的步骤可概括为如下几步:
通过CREATE FUNCTION [function_name]
来声明。如:CREATE FUNCTION getUsername;
在名中通过变量声明参数,如getUsername(uid int)
,并通过returns
指定返回值类型,如 returns varchar,表示返回字符串类型;
通过BEGIN
开始体,并通过END
来结束体;
若在体内使用了变量,需通过DECLARE
来声明变量,如 DECLARE uname varchar(20);
在体内使用 语句得到结果,并通过RETURN
指定返回值。
我们通过上述步骤新建 getUsername ,该通过 id 。
CREATE FUNCTION getUsername(uid int) RETURNS varchar()BEGINDECLARE uname varchar();SELECT username FROM imooc_user WHERE id = uid INTO uname;RETURN uname;END;
在 getUsername 体中,若要给 uname 这样的局部变量赋值,需要使用INTO
关键字。创建完毕后,通过 Select 来,如SELECT getUsername(1)
。
结果如下:
# SELECT getUsername(1); +----------------+ | getUsername(1) | +----------------+ | pedro | +----------------+
4. 实践
请书写 语句,新建getOldestAge
,该获得imooc_user
中的最大年龄。
分析:
按照上面步骤新建 getOldestAge,且该无参,但返回类型为 int ,最大年龄我们可以先使用 Order By 对其排序,然后通过Limit 取第一位,则可得到最大的年龄。
语句:
整理可得语句如下:
CREATE FUNCTION getOldestAge() RETURNS intBEGINRETURN (SELECT age FROM imooc_user ORDER BY age DESC LIMIT );END;
创建该后,使用 Select 来:
SELECT getOldestAge();
结果如下:
+----------------+ | getOldestAge() | +----------------+ | 23 | +----------------+
5. 小结
是十分复杂的一环,难学且使用少,我们不推荐你在上死磕。个小节里,我们没有介绍 Postgre 的使用,因为在 Postgre 中,更加复杂。在市面上,我们很少看到书籍和资料会花大量篇幅在上,但是如果你感兴趣,我们可以给你推荐几个。
Postgre之
自定
在的时候,尤其是在 Where 的条件中慎用
,它会导致不走索引,从而拉低的速度。
用的非常少
,因为它的移植性很差,取得的也不明显。