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() - 格式化某个字段的显示方式
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 输出结果如下:
下面的 SQL 语句选择访问量高于平均访问量的 "site_id" 和 "count":
实例
SELECT site_id, count FROM access_log
WHERE count > (SELECT AVG(count) FROM access_log);
WHERE count > (SELECT AVG(count) FROM access_log);
执行以上 SQL 输出结果如下:
转身幻影
lxi***sheng@163.com
MySQL 语法
ORDER BY column_name ASC
LIMIT 1;
实例
ORDER BY id ASC
LIMIT 1;
MySQL 语法
ORDER BY column_name DESC
LIMIT 1;
实例
ORDER BY id DESC
LIMIT 1;
MAX() 函数
MAX() 函数返回指定列的最大值。
SQL MAX() 语法
演示数据库
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "Websites" 表的数据:
SQL MAX() 实例
下面的 SQL 语句从 "Websites" 表的 "alexa" 列获取最大值:
实例
执行以上 SQL 结果如下所示:
MIN() 函数
MIN() 函数返回指定列的最小值。
SQL MIN() 语法
演示数据库
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "Websites" 表的数据:
SQL MIN() 实例
下面的 SQL 语句从 "Websites" 表的 "alexa" 列获取最小值:
实例
执行以上 SQL 结果如下所示:
SUM() 函数
SUM() 函数返回数值列的总数。
SQL SUM() 语法
演示数据库
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "access_log" 表的数据:
SQL SUM() 实例
下面的 SQL 语句查找 "access_log" 表的 "count" 字段的总数:
实例
执行以上 SQL 输出结果如下:
GROUP BY 语句可结合一些聚合函数来使用
GROUP BY 语句
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
SQL GROUP BY 语法
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
演示数据库
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "Websites" 表的数据:
下面是 "access_log" 网站访问记录表的数据:
GROUP BY 简单应用
统计 access_log 各个 site_id 的访问量:
实例
FROM access_log GROUP BY site_id;
执行以上 SQL 输出结果如下:
SQL GROUP BY 多表连接
现在我们想要查找每个送货员配送的订单数目。
下面的 SQL 语句统计所有网站的访问的记录数:
实例
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;
执行以上 SQL 输出结果如下:
HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
SQL HAVING 语法
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
演示数据库
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "Websites" 表的数据:
下面是 "access_log" 网站访问记录表的数据:
SQL HAVING 实例
现在我们想要查找总访问量大于 200 的网站。
我们使用下面的 SQL 语句:
实例
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 子句:
实例
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 输出结果如下:
UCASE() 函数
UCASE() 函数把字段的值转换为大写。
SQL UCASE() 语法
用于 SQL Server 的语法
演示数据库
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "Websites" 表的数据:
SQL UCASE() 实例
下面的 SQL 语句从 "Websites" 表中选取 "name" 和 "url" 列,并把 "name" 列的值转换为大写:
实例
FROM Websites;
执行以上 SQL 输出结果如下:
LCASE() 函数把字段的值转换为小写。
SQL LCASE() 语法
用于 SQL Server 的语法
演示数据库
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "Websites" 表的数据:
SQL LCASE() 实例
下面的 SQL 语句从 "Websites" 表中选取 "name" 和 "url" 列,并把 "name" 列的值转换为小写:
实例
FROM Websites;
执行以上 SQL 输出结果如下:
MID() 函数
MID() 函数用于从文本字段中提取字符。
SQL MID() 语法
演示数据库
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "Websites" 表的数据:
SQL MID() 实例
下面的 SQL 语句从 "Websites" 表的 "name" 列中提取前 4 个字符:
实例
FROM Websites;
执行以上 SQL 输出结果如下:
LEN() 函数
LEN() 函数返回文本字段中值的长度。
SQL LEN() 语法
MySQL 中函数为 LENGTH():
演示数据库
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "Websites" 表的数据:
SQL LEN() 实例
下面的 SQL 语句从 "Websites" 表中选取 "name" 和 "url" 列中值的长度:
实例
FROM Websites;
执行以上 SQL 输出结果如下:
ROUND() 函数
ROUND() 函数用于把数值字段舍入为指定的小数位数。
SQL ROUND() 语法
SQL ROUND() 实例
ROUND(X): 返回参数X的四舍五入的一个整数。
ROUND(X,D): 返回参数X的四舍五入的有 D 位小数的一个数字。如果D为0,结果将没有小数点或小数部分。
注意:ROUND 返回值被变换为一个BIGINT!
NOW() 函数
NOW() 函数返回当前系统的日期和时间。
SQL NOW() 语法
演示数据库
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "Websites" 表的数据:
SQL NOW() 实例
下面的 SQL 语句从 "Websites" 表中选取 name,url,及当天日期:
实例
FROM Websites;
执行以上 SQL 输出结果如下:
FORMAT() 函数
FORMAT() 函数用于对字段的显示进行格式化。
SQL FORMAT() 语法
演示数据库
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "Websites" 表的数据:
SQL FORMAT() 实例
下面的 SQL 语句从 "Websites" 表中选取 name, url 以及格式化为 YYYY-MM-DD 的日期:
实例
FROM Websites;
执行以上 SQL 输出结果如下:
FROM table_name
WHERE condition
AND|OR condition
ADD column_name datatype
or
ALTER TABLE table_name
DROP COLUMN column_name
FROM table_name
or
SELECT column_name
FROM table_name AS table_alias
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,
...
)
ON table_name (column_name)
or
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
SELECT column_name(s)
FROM table_name
WHERE condition
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 INDEX index_name ON table_name (MS Access)
DROP INDEX index_name (DB2/Oracle)
ALTER TABLE table_name
DROP INDEX index_name (MySQL)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
FROM table_name
WHERE column_name
IN (value1,value2,..)
VALUES (value1, value2, value3,....)
or
INSERT INTO table_name
(column1, column2, column3,...)
VALUES (value1, value2, value3,....)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FROM table_name
WHERE column_name LIKE pattern
FROM table_name
ORDER BY column_name [ASC|DESC]
FROM table_name
FROM table_name
FROM table_name
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
FROM table_name
UNION
SELECT column_name(s) FROM table_name2
UNION ALL
SELECT column_name(s) FROM table_name2
SET column1=value, column2=value,...
WHERE some_column=some_value
FROM table_name
WHERE column_name operator value