✍️
炼码教程 - SQL 边学边练
  • License
  • 介绍 Introduction
    • 目录 Content
  • Level 1
    • Hello SQL
    • 简单的 SELECT 语句
    • 简单的 INSERT 语句
    • 简单的 UPDATE 语句
    • 简单的 DELETE 语句
  • Level 2
    • 简单的数据库和数据表操作
      • 创建数据库
      • 创建数据表
      • 删除数据表
      • 删除数据库
    • 约束
      • 主键约束
      • 自增长约束
    • 常见数据类型
  • Level 3
    • SELECT进阶
      • WHERE 条件子句
      • ORDER BY 与 LIMIT
      • SELECT DISTINCT
    • Function 函数
      • AVG()
      • COUNT()
      • MAX()
      • MIN()
      • SUM()
      • ROUND()
      • NULL()
  • Level 4
    • Level 4 时间
  • Level 5
    • Level 5 多表单联合
    • 外键
    • 别名
    • 多表联结
      • INNER JOIN
      • LEFT JOIN
      • RIGHT JOIN
      • OUTER JOIN
  • Level 6
    • Level 6 临时表单
    • GROUP BY
    • HAVING
    • 子查询
      • SELECT 语句中的子查询
      • INSERT 语句中的子查询
      • UPDATE 语句中的子查询
      • DELETE 语句中的子查询
      • 多行子查询
      • 多列子查询
      • HAVING 子句中的子查询
      • 内联视图子查询
  • Level 7
    • Level 7 索引
  • Level 8
    • Level 8 事务 Transaction
  • Level 9
    • Level 9 复杂的SQL查询
  • Level MAX
    • Level 10 变量和循环
  • 附录 Appendix
    • 数据类型参考手册
    • 函数 Function
    • 通配符
    • 演示数据库
    • common
    • Bug 001
Powered by GitBook
On this page
  • 1. AVG()
  • 1.1 AVG 实例Ⅰ
  • 1.2 AVG 实例Ⅱ
  • 2. COUNT()
  • 2.1 SELECT COUNT(column_name)
  • 2.2 SQL COUNT(*)
  • 2.3 SQL COUNT(DISTINCT column_name)
  • 3. FIRST()
  • SQL Server
  • MySQL
  • Oracle
  • 3.1 FIRST 实例
  • 4. LAST()
  • SQL Server
  • MySQL
  • Oracle
  • 4.1 Last 实例
  • 5. MAX()
  • MAX 实例
  • 6. MIN()
  • MIN 实例
  • 7. SUM()
  • SUM 实例
  • 8. GROUP BY
  • GROUP BY 简单实例
  • GROUP BY 多表实例
  • 9. HAVING
  • HAVING 实例Ⅰ
  • HAVING 实例Ⅱ
  • EXISTS 实例Ⅰ
  • EXISTS 实例Ⅱ
  • UCASE 实例
  • LCASE 实例
  • MID 实例
  • LEN 实例
  • ROUND 实例
  • NOW实例
  • FORMAT 实例

Was this helpful?

  1. 附录 Appendix

函数 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() 函数返回数值列的平均值。

语法

SELECT AVG(column_name) FROM table_name

演示数据库

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

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

+----+----------------+---------------------------+-----+----------+
| id | name           | email                     | age | class_id |
+----+----------------+---------------------------+-----+----------+
|  1 | Sharon Harris  | w.hde@rds.li              |  20 |        1 |
|  2 | Barbara Garcia | e.nnbvfipqeh@hdobycodn.st |  21 |        3 |
|  3 | Shirley Brown  | b.ksfdygd@jpehdkw.net.cn  |  28 |        3 |
|  4 | Anthony Brown  | q.rudpslz@pqvxpyx.org     |  38 |        1 |
|  5 | Gary Lopez     | f.xwpevistkv@szwx.fj      |  38 |        2 |
|  6 | Larry Lopez    | d.lwvxzfi@bpogy.cn        |  21 |        3 |
|  7 | Mark Lopez     | v.coqfyiig@ckccb.bf       |  32 |        2 |
|  8 | Gary Perez     | t.yoffukqvi@qtohpour.td   |  25 |        1 |
| 11 | Mary Harris    | m.mqxcuhwon@ulrprfbji.tk  |  25 |        3 |
| 12 | Lisa Brown     | g.epimkkwxr@rmffcsmgl.mil |  31 |        2 |
+----+----------------+---------------------------+-----+----------+

1.1 AVG 实例Ⅰ

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

SELECT AVG(age) AS AgeAverage FROM student;

执行输出结果

+------------+
| AgeAverage |
+------------+
|    27.9000 |
+------------+

1.2 AVG 实例Ⅱ

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

SELECT * FROM student
WHERE age > (SELECT AVG(age) FROM student);

执行输出结果

+----+---------------+---------------------------+-----+----------+
| id | name          | email                     | age | class_id |
+----+---------------+---------------------------+-----+----------+
|  3 | Shirley Brown | b.ksfdygd@jpehdkw.net.cn  |  28 |        3 |
|  4 | Anthony Brown | q.rudpslz@pqvxpyx.org     |  38 |        1 |
|  5 | Gary Lopez    | f.xwpevistkv@szwx.fj      |  38 |        2 |
|  7 | Mark Lopez    | v.coqfyiig@ckccb.bf       |  32 |        2 |
| 12 | Lisa Brown    | g.epimkkwxr@rmffcsmgl.mil |  31 |        2 |
+----+---------------+---------------------------+-----+----------+

2. COUNT()

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

演示数据库

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

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

+----+----------------+---------------------------+-----+----------+
| id | name           | email                     | age | class_id |
+----+----------------+---------------------------+-----+----------+
|  1 | Sharon Harris  | w.hde@rds.li              |  20 |        1 |
|  2 | Barbara Garcia | e.nnbvfipqeh@hdobycodn.st |  21 |        3 |
|  3 | Shirley Brown  | b.ksfdygd@jpehdkw.net.cn  |  28 |        3 |
|  4 | Anthony Brown  | q.rudpslz@pqvxpyx.org     |  38 |        1 |
|  5 | Gary Lopez     |                           |  38 |        2 |
|  6 | Larry Lopez    | d.lwvxzfi@bpogy.cn        |  21 |        3 |
|  7 | Mark Lopez     | v.coqfyiig@ckccb.bf       |  32 |        2 |
|  8 | Gary Perez     |                           |  25 |        1 |
| 11 | Mary Harris    | m.mqxcuhwon@ulrprfbji.tk  |  25 |        3 |
| 12 | Lisa Brown     | g.epimkkwxr@rmffcsmgl.mil |  31 |        2 |
+----+----------------+---------------------------+-----+----------+

2.1 SELECT COUNT(column_name)

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

语法

SELECT COUNT(column_name) FROM table_name;

实例

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

SELECT COUNT(email) AS nums FROM student;

执行输出结果

+------+
| nums |
+------+
|  8   |
+------+

2.2 SQL COUNT(*)

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

语法

SELECT COUNT(*) FROM table_name;

实例

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

SELECT COUNT(*) AS nums FROM student;

执行输出结果

+------+
| nums |
+------+
|  10  |
+------+

2.3 SQL COUNT(DISTINCT column_name)

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

语法

SELECT COUNT(DISTINCT column_name) FROM table_name;

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

实例

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

SELECT COUNT(DISTINCT age) AS nums FROM student;

执行输出结果

+------+
| nums |
+------+
|    7 |
+------+

3. FIRST()

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

语法

SELECT FIRST(column_name) FROM table_name;

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

演示数据库

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

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

+----+----------------+---------------------------+-----+----------+
| id | name           | email                     | age | class_id |
+----+----------------+---------------------------+-----+----------+
|  1 | Sharon Harris  | w.hde@rds.li              |  20 |        1 |
|  2 | Barbara Garcia | e.nnbvfipqeh@hdobycodn.st |  21 |        3 |
|  3 | Shirley Brown  | b.ksfdygd@jpehdkw.net.cn  |  28 |        3 |
|  4 | Anthony Brown  | q.rudpslz@pqvxpyx.org     |  38 |        1 |
|  5 | Gary Lopez     | f.xwpevistkv@szwx.fj      |  38 |        2 |
|  6 | Larry Lopez    | d.lwvxzfi@bpogy.cn        |  21 |        3 |
|  7 | Mark Lopez     | v.coqfyiig@ckccb.bf       |  32 |        2 |
|  8 | Gary Perez     | t.yoffukqvi@qtohpour.td   |  25 |        1 |
| 11 | Mary Harris    | m.mqxcuhwon@ulrprfbji.tk  |  25 |        3 |
| 12 | Lisa Brown     | g.epimkkwxr@rmffcsmgl.mil |  31 |        2 |
+----+----------------+---------------------------+-----+----------+

SQL Server

语法

SELECT TOP 1 column_name FROM table_name
ORDER BY column_name ASC;

实例

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

SELECT TOP 1 name FROM student
ORDER BY id ASC;

执行输出结果

+---------------+
| name          |
+---------------+
| Sharon Harris |
+---------------+

MySQL

语法

SELECT column_name FROM table_name
ORDER BY column_name ASC
LIMIT 1;

实例

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

SELECT name FROM student
ORDER BY id ASC
LIMIT 1;

执行输出结果

+---------------+
| name          |
+---------------+
| Sharon Harris |
+---------------+

Oracle

语法

SELECT name FROM Websites
ORDER BY id ASC
LIMIT 1;

实例

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

SELECT name FROM student
ORDER BY id ASC
WHERE ROWNUM <=1;

执行输出结果

+---------------+
| name          |
+---------------+
| Sharon Harris |
+---------------+

3.1 FIRST 实例

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

SELECT name FROM student LIMIT 1;

执行输出结果

+---------------+
| name          |
+---------------+
| Sharon Harris |
+---------------+

4. LAST()

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

语法

SELECT LAST(column_name) FROM table_name;

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

演示数据库

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

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

+----+----------------+---------------------------+-----+----------+
| id | name           | email                     | age | class_id |
+----+----------------+---------------------------+-----+----------+
|  1 | Sharon Harris  | w.hde@rds.li              |  20 |        1 |
|  2 | Barbara Garcia | e.nnbvfipqeh@hdobycodn.st |  21 |        3 |
|  3 | Shirley Brown  | b.ksfdygd@jpehdkw.net.cn  |  28 |        3 |
|  4 | Anthony Brown  | q.rudpslz@pqvxpyx.org     |  38 |        1 |
|  5 | Gary Lopez     | f.xwpevistkv@szwx.fj      |  38 |        2 |
|  6 | Larry Lopez    | d.lwvxzfi@bpogy.cn        |  21 |        3 |
|  7 | Mark Lopez     | v.coqfyiig@ckccb.bf       |  32 |        2 |
|  8 | Gary Perez     | t.yoffukqvi@qtohpour.td   |  25 |        1 |
| 11 | Mary Harris    | m.mqxcuhwon@ulrprfbji.tk  |  25 |        3 |
| 12 | Lisa Brown     | g.epimkkwxr@rmffcsmgl.mil |  31 |        2 |
+----+----------------+---------------------------+-----+----------+

SQL Server

语法

SELECT TOP 1 column_name FROM table_name
ORDER BY column_name DESC;

实例

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

SELECT TOP 1 name FROM student
ORDER BY id DESC;

执行输出结果

+------------+
| name       |
+------------+
| Lisa Brown |
+------------+

MySQL

语法

SELECT column_name FROM table_name
ORDER BY column_name DESC
LIMIT 1;

实例

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

SELECT name FROM student
ORDER BY id DESC
LIMIT 1;

执行输出结果

+------------+
| name       |
+------------+
| Lisa Brown |
+------------+

Oracle

语法

SELECT column_name FROM table_name
ORDER BY column_name DESC
WHERE ROWNUM <=1;

实例

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

SELECT name FROM student
ORDER BY id DESC
WHERE ROWNUM <=1;

执行输出结果

+------------+
| name       |
+------------+
| Lisa Brown |
+------------+

4.1 Last 实例

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

SELECT name FROM student
ORDER BY id DESC
LIMIT 1;

执行输出结果

+------------+
| name       |
+------------+
| Lisa Brown |
+------------+

5. MAX()

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

语法

SELECT MAX(column_name) FROM table_name;

MAX 实例

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

SELECT MAX(age) AS max_age FROM student;

执行输出结果

+---------+
| max_age |
+---------+
|      38 |
+---------+

6. MIN()

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

语法

SELECT MIN(column_name) FROM table_name;

MIN 实例

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

SELECT MIN(age) AS min_age FROM student;

执行输出结果

+---------+
| min_age |
+---------+
|      20 |
+---------+

7. SUM()

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

语法

SELECT SUM(column_name) FROM table_name;

SUM 实例

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

SELECT SUM(age) AS nums FROM student;

执行输出结果

+------+
| nums |
+------+
|  279 |
+------+

8. GROUP BY

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

语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

演示数据库

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

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

+----+----------------+---------------------------+-----+----------+
| id | name           | email                     | age | class_id |
+----+----------------+---------------------------+-----+----------+
|  1 | Sharon Harris  | w.hde@rds.li              |  20 |        1 |
|  2 | Barbara Garcia | e.nnbvfipqeh@hdobycodn.st |  21 |        3 |
|  3 | Shirley Brown  | b.ksfdygd@jpehdkw.net.cn  |  28 |        3 |
|  4 | Anthony Brown  | q.rudpslz@pqvxpyx.org     |  38 |        1 |
|  5 | Gary Lopez     | f.xwpevistkv@szwx.fj      |  38 |        2 |
|  6 | Larry Lopez    | d.lwvxzfi@bpogy.cn        |  21 |        3 |
|  7 | Mark Lopez     | v.coqfyiig@ckccb.bf       |  32 |        2 |
|  8 | Gary Perez     | t.yoffukqvi@qtohpour.td   |  25 |        1 |
| 11 | Mary Harris    | m.mqxcuhwon@ulrprfbji.tk  |  25 |        3 |
| 12 | Lisa Brown     | g.epimkkwxr@rmffcsmgl.mil |  31 |        2 |
+----+----------------+---------------------------+-----+----------+

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

+----+--------------------------------------------+--------+-------------+
| id | name                                       | period | created_at |
+----+--------------------------------------------+--------+-------------+
|  1 | JiuZhang Senior Algorithm                  |     88 | 2020-06-01  |
|  2 | System Design                              |    135 | 2020-07-18  |
|  3 | Twitter Back-end Systems: Action in Django |      1 | 2020-02-29  |
+----+--------------------------------------------+--------+-------------+

GROUP BY 简单实例

统计 student 各个 class_id 的人数:

SELECT class_id , COUNT(class_id) AS nums
FROM student GROUP BY class_id ;

执行输出结果

+----------+------+
| class_id | nums |
+----------+------+
|        1 |    3 |
|        3 |    4 |
|        2 |    3 |
+----------+------+

GROUP BY 多表实例

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

SELECT c.name, COUNT(*) AS nums 
FROM student s 
LEFT JOIN class c
ON s.class_id = c.id
GROUP BY s.class_id ;

执行输出结果

+--------------------------------------------+------+
| name                                       | nums |
+--------------------------------------------+------+
| JiuZhang Senior Algorithm                  |    3 |
| Twitter Back-end Systems: Action in Django |    4 |
| System Design                              |    3 |
+--------------------------------------------+------+

9. HAVING

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

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

语法

SELECT   column_name, 
         aggregate_function(column_name) 
FROM     table_name 
WHERE    column_name operator value 
GROUP BY column_name 
HAVING   aggregate_function(column_name) operator value;

演示数据库**

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

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

+----+----------------+---------------------------+-----+----------+
| id | name           | email                     | age | class_id |
+----+----------------+---------------------------+-----+----------+
|  1 | Sharon Harris  | w.hde@rds.li              |  20 |        1 |
|  2 | Barbara Garcia | e.nnbvfipqeh@hdobycodn.st |  21 |        3 |
|  3 | Shirley Brown  | b.ksfdygd@jpehdkw.net.cn  |  28 |        3 |
|  4 | Anthony Brown  | q.rudpslz@pqvxpyx.org     |  38 |        1 |
|  5 | Gary Lopez     | f.xwpevistkv@szwx.fj      |  38 |        2 |
|  6 | Larry Lopez    | d.lwvxzfi@bpogy.cn        |  21 |        3 |
|  7 | Mark Lopez     | v.coqfyiig@ckccb.bf       |  32 |        2 |
|  8 | Gary Perez     | t.yoffukqvi@qtohpour.td   |  25 |        1 |
| 11 | Mary Harris    | m.mqxcuhwon@ulrprfbji.tk  |  25 |        3 |
| 12 | Lisa Brown     | g.epimkkwxr@rmffcsmgl.mil |  31 |        2 |
+----+----------------+---------------------------+-----+----------+

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

+----+--------------------------------------------+--------+-------------+
| id | name                                       | period | created_at |
+----+--------------------------------------------+--------+-------------+
|  1 | JiuZhang Senior Algorithm                  |     88 | 2020-06-01  |
|  2 | System Design                              |    135 | 2020-07-18  |
|  3 | Twitter Back-end Systems: Action in Django |      1 | 2020-02-29  |
+----+--------------------------------------------+--------+-------------+

HAVING 实例Ⅰ

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

我们使用下面的 SQL 语句:

SELECT c.name, COUNT(*) AS nums 
FROM student s 
LEFT JOIN class c
ON s.class_id = c.id
GROUP BY s.class_id 
HAVING  COUNT(*) > 3;

执行输出结果

+--------------------------------------------+------+
| name                                       | nums |
+--------------------------------------------+------+
| Twitter Back-end Systems: Action in Django |    4 |
+--------------------------------------------+------+

HAVING 实例Ⅱ

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

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

SELECT c.name, COUNT(*) AS nums 
FROM student s 
LEFT JOIN class c
ON s.class_id = c.id
WHERE s.age > 20
GROUP BY s.class_id 
HAVING  COUNT(*) > 2;

执行输出结果

+--------------------------------------------+------+
| name                                       | nums |
+--------------------------------------------+------+
| Twitter Back-end Systems: Action in Django |    4 |
| System Design                              |    3 |
+--------------------------------------------+------+
  1. EXISTS

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

语法

SELECT Column_name(s) 
FROM   table_name 
WHERE  EXISTS (SELECT column_name 
               FROM   table_name 
               WHERE  CONDITION);

演示数据库

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

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

+----+--------------+---------------------------+-------+---------+ 
| id | name         | url                       | alexa | country | 
+----+--------------+---------------------------+-------+---------+ 
| 1  | Google       | https://www.google.cm/    | 1     | USA     | 
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      | 
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      | 
| 4  | 微博          | http://weibo.com/         | 20    | CN      | 
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     | 
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     | 
+----+---------------+---------------------------+-------+---------+

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

mysql> SELECT * FROM access_log; 
+-----+---------+-------+------------+ 
| aid | site_id | count | date       | 
+-----+---------+-------+------------+ 
|   1 |       1 |    45 | 2016-05-10 | 
|   2 |       3 |   100 | 2016-05-13 | 
|   3 |       1 |   230 | 2016-05-14 | 
|   4 |       2 |    10 | 2016-05-14 | 
|   5 |       5 |   205 | 2016-05-14 | 
|   6 |       4 |    13 | 2016-05-15 | 
|   7 |       3 |   220 | 2016-05-15 | 
|   8 |       5 |   545 | 2016-05-16 | 
|   9 |       3 |   201 | 2016-05-17 | 
+-----+---------+-------+------------+ 
9 rows in set (0.00 sec)

EXISTS 实例Ⅰ

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

我们使用下面的 SQL 语句:

SELECT websites.NAME, 
       websites.url 
FROM   websites 
WHERE  EXISTS (SELECT count 
               FROM   access_log 
               WHERE  websites.id = access_log.site_id 
                      AND count > 200);

执行输出结果

EXISTS 实例Ⅱ

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

SELECT websites.NAME, 
       websites.url 
FROM   websites 
WHERE  NOT EXISTS (SELECT count 
                   FROM   access_log 
                   WHERE  websites.id = access_log.site_id 
                          AND count > 200);

执行输出结果

  1. UCASE()

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

语法

SELECT UCASE(column_name) FROM table_name;

SQL Server 语法

SELECT UPPER(column_name) FROM table_name;

演示数据库

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

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

+----+--------------+---------------------------+-------+---------+ 
| id | name         | url                       | alexa | country | 
+----+--------------+---------------------------+-------+---------+ 
| 1  | Google       | https://www.google.cm/    | 1     | USA     | 
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      | 
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      | 
| 4  | 微博          | http://weibo.com/         | 20    | CN      | 
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     | 
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     | 
+----+---------------+---------------------------+-------+---------+

UCASE 实例

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

SELECT Ucase(NAME) AS site_title, 
       url 
FROM   websites;

执行输出结果

  1. LCASE()

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

语法

SELECT Lcase(column_name) 
FROM   table_name;

SQL Server 语法

SELECT Lower(column_name) 
FROM   table_name;

演示数据库

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

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

+----+--------------+---------------------------+-------+---------+ 
| id | name         | url                       | alexa | country | 
+----+--------------+---------------------------+-------+---------+ 
| 1  | Google       | https://www.google.cm/    | 1     | USA     | 
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      | 
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      | 
| 4  | 微博          | http://weibo.com/         | 20    | CN      | 
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     | 
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     | 
+----+---------------+---------------------------+-------+---------+

LCASE 实例

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

SELECT Lcase(NAME) AS site_title, 
       url 
FROM   websites;

执行输出结果

  1. MID()

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

语法

SELECT mid(column_name,start[,length]) 
FROM   table_name;

无法复制加载中的内容

演示数据库

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

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

+----+--------------+---------------------------+-------+---------+ 
| id | name         | url                       | alexa | country | 
+----+--------------+---------------------------+-------+---------+ 
| 1  | Google       | https://www.google.cm/    | 1     | USA     | 
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      | 
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      | 
| 4  | 微博          | http://weibo.com/         | 20    | CN      | 
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     | 
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     | 
+----+---------------+---------------------------+-------+---------+

MID 实例

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

SELECT MID(name,1,4) AS ShortTitle
FROM Websites;

执行输出结果

  1. LEN()

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

语法

SELECT Len(column_name) 
FROM   table_name;

MySQL 中函数为 LENGTH()

SELECT Length(column_name) 
FROM   table_name;

演示数据库

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

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

+----+--------------+---------------------------+-------+---------+ 
| id | name         | url                       | alexa | country | 
+----+--------------+---------------------------+-------+---------+ 
| 1  | Google       | https://www.google.cm/    | 1     | USA     | 
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      | 
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      | 
| 4  | 微博          | http://weibo.com/         | 20    | CN      | 
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     | 
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     | 
+----+---------------+---------------------------+-------+---------+

LEN 实例

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

SELECT NAME, 
       Length(url) AS LengthOfURL 
FROM   websites;

执行输出结果

  1. ROUND()

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

语法

SELECT ROUND(column_name,decimals) FROM table_name;

无法复制加载中的内容

ROUND 实例

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

mysql> select ROUND(-1.23); 
        -> -1 
mysql> select ROUND(-1.58); 
        -> -2 
mysql> select ROUND(1.58); 
        -> 2

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

mysql> select ROUND(1.298, 1);
        -> 1.3
mysql> select ROUND(1.298, 0);
        -> 1

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

  1. NOW()

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

语法

SELECT NOW() FROM table_name;

演示数据库

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

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

+----+--------------+---------------------------+-------+---------+ 
| id | name         | url                       | alexa | country | 
+----+--------------+---------------------------+-------+---------+ 
| 1  | Google       | https://www.google.cm/    | 1     | USA     | 
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      | 
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      | 
| 4  | 微博          | http://weibo.com/         | 20    | CN      | 
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     | 
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     | 
+----+---------------+---------------------------+-------+---------+

NOW实例

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

SELECT NAME, 
       url, 
       Now() AS date 
FROM   websites;

执行输出结果

  1. FORMAT()

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

语法

SELECT Format(column_name, format) 
FROM   table_name;

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

FORMAT 实例

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

SELECT NAME, 
       url, 
       DATE_FORMAT(NOW(), '%Y-%m-%d') AS date 
FROM   websites;

执行输出结果

Previous数据类型参考手册Next通配符

Last updated 4 years ago

Was this helpful?

img
img
img
img
img
img
img
img