您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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 的条件中慎用,它会导致不走索引,从而拉低的速度。

用的非常少,因为它的移植性很差,取得的也不明显。


联系我
置顶