SQL 函数

SQL 函数

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 函数。

SQL AVG() 函数


AVG() 函数

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

SQL AVG() 语法

SELECT AVG(column_name) FROM table_name


演示数据库

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

下面是选自 “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 |
+-----+---------+-------+------------+

SQL AVG() 实例

下面的 SQL 语句从 “access_log” 表的 “count” 列获取平均值:

实例

SELECT AVG(count) AS CountAverage FROM access_log;

执行以上 SQL 输出结果如下:

174.3333

下面的 SQL 语句选择访问量高于平均访问量的 “site_id” 和 “count”:

实例

SELECT site_id, count FROM access_log
WHERE count > (SELECT AVG(count) FROM access_log);

执行以上 SQL 输出结果如下:

1	230
5	205
3	220
5	545
3	201

SQL COUNT() 函数


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


SQL COUNT(column_name) 语法

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

SELECT COUNT(column_name) FROM table_name;

SQL COUNT(*) 语法

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

SELECT COUNT(*) FROM table_name;

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。


演示数据库

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

下面是选自 “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 |
+-----+---------+-------+------------+

SQL COUNT(column_name) 实例

下面的 SQL 语句计算 “access_log” 表中 “site_id”=3 的总访问量:

实例

SELECT COUNT(count) AS nums FROM access_log
WHERE site_id=3;

3


SQL COUNT(*) 实例

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

实例

SELECT COUNT(*) AS nums FROM access_log;

执行以上 SQL 输出结果如下:

9

SQL COUNT(DISTINCT column_name) 实例

下面的 SQL 语句计算 “access_log” 表中不同 site_id 的记录数:

实例

SELECT COUNT(DISTINCT site_id) AS nums FROM access_log;

执行以上 SQL 输出结果如下:

5

SQL FIRST() 函数


FIRST() 函数

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

SQL FIRST() 语法

SELECT FIRST(column_name) FROM table_name;

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


SQL Server、MySQL 和 Oracle 中的 SQL FIRST() 工作区

SQL Server 语法

SELECT TOP 1 column_name FROM table_nameORDER BY column_name ASC;

实例

SELECT TOP 1 name FROM Websites
ORDER BY id ASC;

MySQL 语法

SELECT column_name FROM table_name
ORDER BY column_name ASC
LIMIT 1;

实例

SELECT name FROM Websites
ORDER BY id ASC
LIMIT 1;

Oracle 语法

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

实例

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


演示数据库

在本教程中,我们将使用 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     |
|  6 | 百度         | https://www.baidu.com/    |     4 | CN      |
|  7 | stackoverflow | http://stackoverflow.com/ |     0 | IND     |

SQL FIRST() 实例

下面的 SQL 语句选取 “Websites” 表的 “name” 列中第一个记录的值:

实例

SELECT name AS FirstSite FROM Websites LIMIT 1;

执行以上 SQL 结果如下所示:

Google

SQL LAST() 函数


LAST() 函数

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

SQL LAST() 语法

SELECT LAST(column_name) FROM table_name;

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


SQL Server、MySQL 和 Oracle 中的 SQL LAST() 工作区

SQL Server 语法

SELECT TOP 1 column_name FROM table_nameORDER BY column_name DESC;

实例

SELECT TOP 1 name FROM Websites
ORDER BY id DESC;

MySQL 语法

SELECT column_name FROM table_name
ORDER BY column_name DESC
LIMIT 1;

实例

SELECT name FROM Websites
ORDER BY id DESC
LIMIT 1;

Oracle 语法

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

实例

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


演示数据库

在本教程中,我们将使用 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     |
|  6 | 百度         | https://www.baidu.com/    |     4 | CN      |
|  7 | stackoverflow | http://stackoverflow.com/ |     0 | IND     |
+----+---------------+---------------------------+-------+---------+

SQL LAST() 实例

下面的 SQL 语句选取 “Websites” 表的 “name” 列中最后一个记录的值:

实例

SELECT name FROM Websites
ORDER BY id DESC
LIMIT 1;

执行以上 SQL 结果如下所示:

QQ APP

SQL MAX() 函数


MAX() 函数

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

SQL MAX() 语法

SELECT MAX(column_name) FROM table_name;


演示数据库

在本教程中,我们将使用 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/    | 5000  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
|  6 | 百度         | https://www.baidu.com/    |     4 | CN      |
|  7 | stackoverflow | http://stackoverflow.com/ |     0 | IND     |
+----+---------------+---------------------------+-------+---------+

SQL MAX() 实例

下面的 SQL 语句从 “Websites” 表的 “alexa” 列获取最大值:

实例

SELECT MAX(alexa) AS max_alexa FROM Websites;

执行以上 SQL 结果如下所示:

5000

SQL MIN() Function


MIN() 函数

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

SQL MIN() 语法

SELECT MIN(column_name) FROM table_name;


演示数据库

在本教程中,我们将使用 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     |
|  6 | 百度         | https://www.baidu.com/    |     4 | CN      |
|  7 | stackoverflow | http://stackoverflow.com/ |     0 | IND     |
+----+---------------+---------------------------+-------+---------+

SQL MIN() 实例

下面的 SQL 语句从 “Websites” 表的 “alexa” 列获取最小值:

实例

SELECT MIN(alexa) AS min_alexa FROM Websites;

执行以上 SQL 结果如下所示:

0

SQL SUM() 函数


SUM() 函数

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

SQL SUM() 语法

SELECT SUM(column_name) FROM table_name;


演示数据库

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

下面是选自 “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)

SQL SUM() 实例

下面的 SQL 语句查找 “access_log” 表的 “count” 字段的总数:

实例

SELECT SUM(count) AS nums FROM access_log;

执行以上 SQL 输出结果如下:

1569

SQL GROUP BY 语句


GROUP BY 语句可结合一些聚合函数来使用


GROUP BY 语句

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

SQL GROUP BY 语法

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


演示数据库

在本教程中,我们将使用 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 |
+-----+---------+-------+------------+

GROUP BY 简单应用

统计 access_log 各个 site_id 的访问量:

实例

SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;

执行以上 SQL 输出结果如下:

SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;

SQL GROUP BY 多表连接

下面的 SQL 语句统计有记录的网站的记录数量:

实例

SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;

执行以上 SQL 输出结果如下

Facebook	2
Google	2
微博	1
淘宝	1
菜鸟教程	3

SQL HAVING 子句


HAVING 子句

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

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

SQL HAVING 语法

SQL HAVING 语法

SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1 HAVING condition;

参数说明:

  • column1:要检索的列。
  • aggregate_function(column2):一个聚合函数,例如SUM、COUNT、AVG等,应用于column2的值。
  • table_name:要从中检索数据的表。
  • GROUP BY column1:根据column1列的值对数据进行分组。
  • HAVING 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 |
+-----+---------+-------+------------+

SQL HAVING 实例

现在我们想要查找总访问量大于 200 的网站。

我们使用下面的 SQL 语句:

实例

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log INNER JOIN Websites ON access_log.site_id=Websites.id) GROUP BY Websites.name HAVING SUM(access_log.count) > 200;

执行以上 SQL 输出结果如下:

现在我们想要查找总访问量大于 200 的网站,并且 alexa 排名小于 200。

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

实例

SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites INNER JOIN access_log ON Websites.id=access_log.site_id WHERE Websites.alexa < 200 GROUP BY Websites.name HAVING SUM(access_log.count) > 200;

执行以上 SQL 输出结果如下:

SQL EXISTS 运算符


EXISTS 运算符

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

SQL EXISTS 语法

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     |
+----+--------------+---------------------------+-------+---------+

下面是 “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 |
+-----+---------+-------+------------+

SQL 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);

执行以上 SQL 输出结果如下:

Google	https://www.google.cm/
菜鸟教程	http://www.runoob.com/
Facebook	https://www.facebook.com/

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);

执行以上 SQL 输出结果如下:

淘宝	https://www.taobao.com/
微博	http://weibo.com/
stackoverflow	http://stackoverflow.com/
QQ APP	
微博 APP	
淘宝 APP	
QQ APP	

SQL UCASE() 函数


UCASE() 函数

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

SQL UCASE() 语法

SELECT UCASE(column_name) FROM table_name;

用于 SQL Server 的语法

SELECT UPPER(column_name) FROM table_name;


演示数据库

在本教程中,我们将使用 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     |
+----+---------------+---------------------------+-------+---------+

SQL UCASE() 实例

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

实例

SELECT UCASE(name) AS site_title, url
FROM Websites;

执行以上 SQL 输出结果如下:

GOOGLE	https://www.google.cm/
淘宝	https://www.taobao.com/
菜鸟教程	http://www.runoob.com/
微博	http://weibo.com/
FACEBOOK	https://www.facebook.com/
STACKOVERFLOW	http://stackoverflow.com/
QQ APP	
微博 APP	
淘宝 APP	
QQ APP	

SQL LCASE() 函数


LCASE() 函数

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

SQL LCASE() 语法

SELECT LCASE(column_name) FROM table_name;

用于 SQL Server 的语法

SELECT LOWER(column_name) FROM table_name;


演示数据库

在本教程中,我们将使用 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     |
+----+---------------+---------------------------+-------+---------+

SQL LCASE() 实例

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

实例

SELECT LCASE(name) AS site_title, url
FROM Websites;

执行以上 SQL 输出结果如下:

google	https://www.google.cm/
淘宝	https://www.taobao.com/
菜鸟教程	http://www.runoob.com/
微博	http://weibo.com/
facebook	https://www.facebook.com/
stackoverflow	http://stackoverflow.com/
qq app	
微博 app	
淘宝 app	
qq app	

SQL MID() 函数


MID() 函数

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

SQL MID() 语法

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

参数	描述
column_name	必需。要提取字符的字段。
start	必需。规定开始位置(起始值是 1)。
length	可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。

演示数据库

在本教程中,我们将使用 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     |
+----+---------------+---------------------------+-------+---------+

SQL MID() 实例

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

实例

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

执行以上 SQL 输出结果如下:

Goog
淘宝
菜鸟教程
微博
Face
stac
QQ A
微博 A
淘宝 A
QQ A

SQL LEN() 函数


LEN() 函数

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

SQL LEN() 语法

SELECT LEN(column_name) FROM table_name;

MySQL 中函数为 LENGTH():

SELECT LENGTH(column_name) FROM table_name;

演示数据库

在本教程中,我们将使用 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     |
+----+---------------+---------------------------+-------+---------+

SQL LEN() 实例

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

实例

SELECT name, LENGTH(url) as LengthOfURL
FROM Websites;

执行以上 SQL 输出结果如下

Google	22
淘宝	23
菜鸟教程	22
微博	17
Facebook	25
stackoverflow	25
QQ APP	
微博 APP	
淘宝 APP	
QQ APP	

SQL ROUND() 函数


ROUND() 函数

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

SQL ROUND() 语法

SELECT ROUND(column_name,decimals) FROM TABLE_NAME;

参数	描述
column_name	必需。要舍入的字段。
decimals	可选。规定要返回的小数位数。

SQL 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!

SQL NOW() 函数


NOW() 函数

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

SQL NOW() 语法

SELECT NOW() FROM table_name;


演示数据库

在本教程中,我们将使用 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     |
+----+---------------+---------------------------+-------+---------+

SQL NOW() 实例

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

实例

SELECT name, url, Now() AS date
FROM Websites;

执行以上 SQL 输出结果如下:

Google	https://www.google.cm/	2024-03-11 15:44:31
淘宝	https://www.taobao.com/	2024-03-11 15:44:31
菜鸟教程	http://www.runoob.com/	2024-03-11 15:44:31
微博	http://weibo.com/	2024-03-11 15:44:31
Facebook	https://www.facebook.com/	2024-03-11 15:44:31
stackoverflow	http://stackoverflow.com/	2024-03-11 15:44:31
QQ APP		2024-03-11 15:44:31
微博 APP		2024-03-11 15:44:31
淘宝 APP		2024-03-11 15:44:31
QQ APP		2024-03-11 15:44:31

SQL FORMAT() 函数


FORMAT() 函数

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

SQL FORMAT() 语法

SELECT FORMAT(column_name,format) FROM table_name;

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

演示数据库

在本教程中,我们将使用 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     |
+----+---------------+---------------------------+-------+---------+

SQL FORMAT() 实例

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

实例

SELECT name, url, DATE_FORMAT(Now(),‘%Y-%m-%d’) AS date
FROM Websites;

执行以上 SQL 输出结果如下:

Google	https://www.google.cm/	2024-03-11
淘宝	https://www.taobao.com/	2024-03-11
菜鸟教程	http://www.runoob.com/	2024-03-11
微博	http://weibo.com/	2024-03-11
Facebook	https://www.facebook.com/	2024-03-11
stackoverflow	http://stackoverflow.com/	2024-03-11
QQ APP		2024-03-11
微博 APP		2024-03-11
淘宝 APP		2024-03-11
QQ APP		2024-03-11

SQL 快速参考

SQL 语句	语法
AND / OR	SELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition
ALTER TABLE	ALTER TABLE table_name
ADD column_name datatype
or

ALTER TABLE table_name
DROP COLUMN column_name

AS (alias)	SELECT column_name AS column_alias
FROM table_name
or

SELECT column_name
FROM table_name AS table_alias

BETWEEN	SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
CREATE DATABASE	CREATE DATABASE database_name
CREATE TABLE	CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,
...
)
CREATE INDEX	CREATE INDEX index_name
ON table_name (column_name)
or

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

CREATE VIEW	CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
DELETE	DELETE FROM table_name
WHERE some_column=some_value
or

DELETE FROM table_name
(Note: Deletes the entire table!!)

DELETE * FROM table_name
(Note: Deletes the entire table!!)

DROP DATABASE	DROP DATABASE database_name
DROP INDEX	DROP INDEX table_name.index_name (SQL Server)
DROP INDEX index_name ON table_name (MS Access)
DROP INDEX index_name (DB2/Oracle)
ALTER TABLE table_name
DROP INDEX index_name (MySQL)
DROP TABLE	DROP TABLE table_name
GROUP BY	SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
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
IN	SELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)
INSERT INTO	INSERT INTO table_name
VALUES (value1, value2, value3,....)
or

INSERT INTO table_name
(column1, column2, column3,...)
VALUES (value1, value2, value3,....)

INNER JOIN	SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LEFT JOIN	SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
RIGHT JOIN	SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FULL JOIN	SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LIKE	SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
ORDER BY	SELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]
SELECT	SELECT column_name(s)
FROM table_name
SELECT *	SELECT *
FROM table_name
SELECT DISTINCT	SELECT DISTINCT column_name(s)
FROM table_name
SELECT INTO	SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_table_name
or

SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_table_name

SELECT TOP	SELECT TOP number|percent column_name(s)
FROM table_name
TRUNCATE TABLE	TRUNCATE TABLE table_name
UNION	SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION ALL	SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
UPDATE	UPDATE table_name
SET column1=value, column2=value,...
WHERE some_column=some_value
WHERE	SELECT column_name(s)
FROM table_name
WHERE column_name operator value

SQL 主机

SQL 主机

如果您想要您的网站存储数据在数据库并从数据库显示数据,您的 Web 服务器必须能使用 SQL 语言访问数据库系统。

如果您的 Web 服务器托管在互联网服务提供商(ISP,全称 Internet Service Provider),您必须寻找 SQL 主机计划。

最常见的 SQL 主机数据库是 MySQL、MS SQL Server 和 MS Access。

您可以在 Windows 和 Linux/UNIX 操作系统上运行 SQL 主机数据库。

下面是操作系统上对应运行的数据库系统的概览。

MS SQL Server

在 Windows 和 Linux 操作系统上运行。

MySQL

在 Windows, Mac OS X 和 Linux/UNIX 操作系统上运行。

MS Access(只建议用于小型网站)

只在 Windows OS 上运行。

如需学习有关 Web 主机的知识,请访问我们的 主机教程

SQL 总结

本 SQL 教程已经向您讲解了用来访问和处理数据库系统的标准计算机语言。

我们已经学习了如何使用 SQL 在数据库中执行查询、获取数据、插入新的记录、删除记录以及更新记录。

我们已经学习了如何通过 SQL 创建数据库、表、索引,以及如何撤销它们。

我们已经学习了 SQL 中最重要的 Aggregate 函数。

SQL 是一种与数据库系统协同工作的标准语言,这些数据库系统包括 MS SQL Server、IBM DB2、Oracle、MySQL 和 MS Access 等等。

相关推荐

  1. sql-函数

    2024-03-12 00:26:04       46 阅读
  2. SQL 函数

    2024-03-12 00:26:04       35 阅读
  3. SQL高级:窗口函数

    2024-03-12 00:26:04       63 阅读
  4. (四)SQL函数

    2024-03-12 00:26:04       62 阅读
  5. SQL中聚合函数

    2024-03-12 00:26:04       48 阅读
  6. SQL函数类型

    2024-03-12 00:26:04       54 阅读
  7. SQL常用函数

    2024-03-12 00:26:04       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-12 00:26:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-12 00:26:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-12 00:26:04       82 阅读
  4. Python语言-面向对象

    2024-03-12 00:26:04       91 阅读

热门阅读

  1. Git - Protocol

    2024-03-12 00:26:04       34 阅读
  2. Linux基础命令

    2024-03-12 00:26:04       44 阅读
  3. 【C#语言入门】16. 委托详解

    2024-03-12 00:26:04       37 阅读
  4. 【IVA】加速计算中常用的硬件

    2024-03-12 00:26:04       41 阅读
  5. Vue教学16:探索Element UI,开启Vue项目创建之旅

    2024-03-12 00:26:04       38 阅读
  6. 第6章---GameplayTag初识以及拾起物品UI制作

    2024-03-12 00:26:04       35 阅读
  7. hdu 2079 选课时间

    2024-03-12 00:26:04       38 阅读