函数 Function

SQL 拥有很多可用于计数和计算的内建函数。

SQL Aggregate 函数

SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。

有用的 Aggregate 函数:

  • AVG() - 返回平均值

  • COUNT() - 返回行数

  • FIRST() - 返回第一个记录的值

  • LAST() - 返回最后一个记录的值

  • MAX() - 返回最大值

  • MIN() - 返回最小值

  • SUM() - 返回总和

SQL Scalar 函数

SQL Scalar 函数基于输入值,返回一个单一的值。

有用的 Scalar 函数:

  • UCASE() - 将某个字段转换为大写

  • LCASE() - 将某个字段转换为小写

  • MID() - 从某个文本字段提取字符,MySql 中使用

  • SubString(字段,1,end) - 从某个文本字段提取字符

  • LEN() - 返回某个文本字段的长度

  • ROUND() - 对某个数值字段进行指定小数位数的四舍五入

  • NOW() - 返回当前的系统日期和时间

  • FORMAT() - 格式化某个字段的显示方式

提示:在下面的部分,我们会详细讲解 Aggregate 函数和 Scalar 函数。

1. AVG()

AVG() 函数返回数值列的平均值。

语法

演示数据库

在本教程中,我们将使用 Lintcode 样本数据库。

下面是选自 "student" 表的数据:

1.1 AVG 实例Ⅰ

下面的 SQL 语句从 "student" 表的 "age" 列获取平均值:

执行输出结果

1.2 AVG 实例Ⅱ

下面的 SQL 语句选择 age (年龄) 高于平均 age 的所有学生:

执行输出结果

2. COUNT()

COUNT() 函数返回匹配指定条件的行数。

演示数据库

在本教程中,我们将使用 lintcode样本数据库。

下面是选自 "student" 表的数据:

2.1 SELECT COUNT(column_name)

COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)

语法

实例

下面的 SQL 语句计算 "student" 表中有多少人绑定了邮箱:

执行输出结果

2.2 SQL COUNT(*)

COUNT(*) 函数返回表中的记录数

语法

实例

下面的 SQL 语句计算 "access_log" 表中总记录数:

执行输出结果

2.3 SQL COUNT(DISTINCT column_name)

COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目

语法

注释:COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但是无法用于 Microsoft Access。

实例

下面的 SQL 语句计算 "student" 表中不同 age 的记录数:

执行输出结果

3. FIRST()

FIRST() 函数返回指定的列中第一个记录的值。

语法

注释:只有 MS Access 支持 FIRST() 函数。

演示数据库

在本教程中,我们将使用 Lintcode 样本数据库。

下面是选自 "student" 表的数据:

SQL Server

语法

实例

下面的 SQL 语句计算 "student" 表中 id 最小的学员姓名。

执行输出结果

MySQL

语法

实例

下面的 SQL 语句计算 "student" 表中 id 最小的学员姓名。

执行输出结果

Oracle

语法

实例

下面的 SQL 语句计算 "student" 表中 id 最小的学员姓名。

执行输出结果

3.1 FIRST 实例

下面的 SQL 语句选取 "student" 表的 "name" 列中第一个记录的值:

执行输出结果

4. LAST()

LAST() 函数返回指定的列中最后一个记录的值。

语法

注释:只有 MS Access 支持 LAST() 函数。

演示数据库

在本教程中,我们将使用 Lintcode 样本数据库。

下面是选自 "student" 表的数据:

SQL Server

语法

实例

下面的 SQL 语句计算 "student" 表中 id 最大的学员姓名。

执行输出结果

MySQL

语法

实例

下面的 SQL 语句计算 "student" 表中 id 最大的学员姓名。

执行输出结果

Oracle

语法

实例

下面的 SQL 语句计算 "student" 表中 id 最大的学员姓名。

执行输出结果

4.1 Last 实例

下面的 SQL 语句计算 "student" 表中 id 最大的学员姓名:

执行输出结果

5. MAX()

MAX() 函数返回指定列的最大值。

语法

MAX 实例

下面的 SQL 语句从 "student" 表的 "age" 列获取最大值:

执行输出结果

6. MIN()

MIN() 函数返回指定列的最小值。

语法

MIN 实例

下面的 SQL 语句从 "student" 表的 "age" 列获取最小值:

执行输出结果

7. SUM()

SUM() 函数返回数值列的总数。

语法

SUM 实例

下面的 SQL 语句查找 "student" 表的 "age" 字段的总数:

执行输出结果

8. GROUP BY

GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

语法

演示数据库

在本教程中,我们将使用 Lintcode 样本数据库。

下面是选自 "student" 表的数据:

下面是 "class" 班级表的数据:

GROUP BY 简单实例

统计 student 各个 class_id 的人数:

执行输出结果

GROUP BY 多表实例

下面的 SQL 语句统计班级名和其班级的人数:

执行输出结果

9. HAVING

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。

HAVING 子句可以让我们筛选分组后的各组数据。

语法

演示数据库**

在本教程中,我们将使用 Lintcode 样本数据库。

下面是选自 "student" 表的数据:

下面是 "class" 班级表的数据:

HAVING 实例Ⅰ

现在我们想要查找班级的人数大于 3 的班级名和人数。

我们使用下面的 SQL 语句:

执行输出结果

HAVING 实例Ⅱ

现在我们想要查找班级的人数大于 2 且学员年龄需要大于 20岁的班级名和人数。

我们在 SQL 语句中增加一个普通的 WHERE 子句:

执行输出结果

  1. EXISTS

EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False

语法

演示数据库

在本小节中,我们将使用 RUNOOB 样本数据库。

下面是选自 "Websites" 表的数据:

下面是 "access_log" 网站访问记录表的数据:

EXISTS 实例Ⅰ

现在我们想要查找总访问量(count 字段)大于 200 的网站是否存在。

我们使用下面的 SQL 语句:

执行输出结果

img

EXISTS 实例Ⅱ

EXISTS 可以与 NOT 一同使用,查找出不符合查询语句的记录:

执行输出结果

img
  1. UCASE()

UCASE() 函数把字段的值转换为大写

语法

SQL Server 语法

演示数据库

在本教程中,我们将使用 lintcode 样本数据库。

下面是选自 "Websites" 表的数据:

UCASE 实例

下面的 SQL 语句从 "Websites" 表中选取 "name" 和 "url" 列,并把 "name" 列的值转换为大写:

执行输出结果

img
  1. LCASE()

LCASE() 函数把字段的值转换为小写。

语法

SQL Server 语法

演示数据库

在本教程中,我们将使用 lintcode 样本数据库。

下面是选自 "Websites" 表的数据:

LCASE 实例

下面的 SQL 语句从 "Websites" 表中选取 "name" 和 "url" 列,并把 "name" 列的值转换为小写:

执行输出结果

img
  1. MID()

MID() 函数用于从文本字段中提取字符。

语法

无法复制加载中的内容

演示数据库

在本教程中,我们将使用 lintcode 样本数据库。

下面是选自 "Websites" 表的数据:

MID 实例

下面的 SQL 语句从 "Websites" 表的 "name" 列中提取前 4 个字符:

执行输出结果

img
  1. LEN()

LEN() 函数返回文本字段中值的长度。

语法

MySQL 中函数为 LENGTH()

演示数据库

在本教程中,我们将使用 lintcode 样本数据库。

下面是选自 "Websites" 表的数据:

LEN 实例

下面的 SQL 语句从 "Websites" 表中选取 "name" 和 "url" 列中值的长度:

执行输出结果

img
  1. ROUND()

ROUND() 函数用于把数值字段舍入为指定的小数位数。

语法

无法复制加载中的内容

ROUND 实例

ROUND(X): 返回参数X的四舍五入的一个整数。

ROUND(X,D): 返回参数X的四舍五入的有 D 位小数的一个数字。如果D为0,结果将没有小数点或小数部分。

注意:ROUND 返回值被变换为一个BIGINT!

  1. NOW()

NOW() 函数返回当前系统的日期和时间。

语法

演示数据库

在本教程中,我们将使用 lintcode 样本数据库。

下面是选自 "Websites" 表的数据:

NOW实例

下面的 SQL 语句从 "Websites" 表中选取 name,url,及当天日期:

执行输出结果

img
  1. FORMAT()

FORMAT() 函数用于对字段的显示进行格式化。

语法

参数描述column_name必需。要格式化的字段。format必需。规定格式。

FORMAT 实例

下面的 SQL 语句从 "Websites" 表中选取 name, url 以及格式化为 YYYY-MM-DD 的日期:

执行输出结果

img

Last updated

Was this helpful?