Windows 下,使用 MySQL5.6.x ,学习 mysql 。
资料:MySQL 必知必会。
所列举代码为dos下实验代码。
一、使用 mysql(第四章)
二、检索数据(第五章)
三、过滤数据(第六章)
四、数据过滤(第七章)
五、用通配符进行过滤(第八章)
六、用正则表达式进行搜索(第九章) —> 未完成
七、创建计算字段(第十章)
八、使用数据处理函数(第十一章)
九、汇总数据(第十二章)
准备工作:
查看已启动的服务:
net start
启动、停止mysql
net start mysql56 #启动mysql56
net stop mysql56 #停止mysql56
一、使用 mysql(第四章)
连接数据库:
#mysql: 命令。
#-u:后加用户名
#-p:稍后输入密码
#确定后再输入密码
mysql -uroot -p
查看可用的数据库:
SHOW DATABASES;
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql>
选择数据库:
USE test
mysql> USE test
Database changed
mysql>
查看当前选择的数据库的可用表的列表:
SHOW TABLES;
mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| student |
| user |
+----------------+
2 rows in set (0.00 sec)
mysql>
显示表列:
SHOW COLUMNS
FROM user; #显示表user的列信息
#或
DESCRIBE user; #在mysql中,DESCRIBE 等同于 SHOW COLUMNS FROM
mysql> SHOW COLUMNS FROM user;
+---------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | text | YES | | NULL | |
| email | text | YES | | NULL | |
| passwd | text | YES | | NULL | |
| last_modified | double | YES | | NULL | |
+---------------+---------+------+-----+---------+-------+
5 rows in set (0.02 sec)
mysql>
其他SHOW语句:
SHOW STATUS, 用于显示广泛的服务器状态信息;
SHOW CREATE DATABASE 和SHOW CREATE TABLE,分别用来显示创建特定数据库或表的MySQL语句;
SHOW GRANTS,用来显示授予用户(所有用户或特定用户)的安全权限;
SHOW ERRORS和SHOW WARNINGS, 用来显示服务器错误或警告消息。
二、检索数据(第五章)
检索单个列:
SELECT id
FROM user;
mysql> SELECT id FROM user;
+--------+
| id |
+--------+
| 100 |
| 101 |
| 1000 |
| 8080 |
| 96900 |
| 96901 |
| 900301 |
+--------+
7 rows in set (0.08 sec)
mysql>
检索多个列:
SELECT id, name
FROM user;
mysql> SELECT id, name FROM user;
+--------+---------+
| id | name |
+--------+---------+
| 100 | Alice |
| 101 | Sarah |
| 1000 | Michael |
| 8080 | Julia |
| 96900 | Ada |
| 96901 | Adam |
| 900301 | Python |
+--------+---------+
7 rows in set (0.01 sec)
mysql>
检索所有列(不推荐使用):
SELECT *
FROM user;
mysql> SELECT * FROM user;
+--------+---------+---------------------+-----------+----------------+
| id | name | email | passwd | last_modified |
+--------+---------+---------------------+-----------+----------------+
| 100 | Alice | alice@test.org | ABC-12345 | 1513922214.284 |
| 101 | Sarah | sarah@test.org | ABC-12345 | 1513922214.284 |
| 1000 | Michael | michael@example.org | 654321 | 1513922215.332 |
| 8080 | Julia | Julia@test.org | JULIA | 1513922215.956 |
| 96900 | Ada | ada@test.org | A-12345 | 1513922213.702 |
| 96901 | Adam | adam@test.org | A-12345 | 1513922213.702 |
| 900301 | Python | Python@test.org | PYTHON | 1513922214.926 |
+--------+---------+---------------------+-----------+----------------+
7 rows in set (0.03 sec)
mysql>
检索不同的行:
SELECT DISTINCT last_modified
FROM user;
mysql> SELECT DISTINCT last_modified
-> FROM user;
+----------------+
| last_modified |
+----------------+
| 1513922214.284 |
| 1513922215.332 |
| 1513922215.956 |
| 1513922213.702 |
| 1513922214.926 |
+----------------+
5 rows in set (0.00 sec)
mysql>
限制返回部分结果:
返回前5行:
mysql> SELECT id
-> FROM user
-> LIMIT 5;
mysql> SELECT id
-> FROM user
-> LIMIT 5;
+-------+
| id |
+-------+
| 100 |
| 101 |
| 1000 |
| 8080 |
| 96900 |
+-------+
5 rows in set (0.00 sec)
mysql>
检索从第一行开始的5行(行计数是从0开始的,所以第1行是第二个行):
mysql> SELECT id
-> FROM user
-> LIMIT 1,5
-> ;
mysql> SELECT id
-> FROM user
-> LIMIT 1,5
-> ;
+-------+
| id |
+-------+
| 101 |
| 1000 |
| 8080 |
| 96900 |
| 96901 |
+-------+
5 rows in set (0.00 sec)
mysql>
使用完全限定的表名
mysql> SELECT user.id
-> FROM test.user
-> ;
等同于:
mysql> SELECT id
-> FROM user
-> ;
mysql> SELECT user.id
-> FROM test.user
-> ;
+--------+
| id |
+--------+
| 100 |
| 101 |
| 1000 |
| 8080 |
| 96900 |
| 96901 |
| 900301 |
+--------+
7 rows in set (0.03 sec)
mysql>
三、排序检索数据
对检索的数据按一列排序:
mysql> SELECT id
-> FROM user
-> ORDER BY id
-> ;
mysql> SELECT id
-> FROM user
-> ORDER BY id
-> ;
+--------+
| id |
+--------+
| 100 |
| 101 |
| 1000 |
| 8080 |
| 96900 |
| 96901 |
| 900301 |
+--------+
7 rows in set (0.15 sec)
mysql>
对返回的数据按多个列排序:
#首先按id,然后按name
mysql> SELECT id, name
-> FROM user
-> ORDER BY id,name
-> ;
mysql> SELECT id, name
-> FROM user
-> ORDER BY id,name
-> ;
+--------+---------+
| id | name |
+--------+---------+
| 100 | Alice |
| 101 | Sarah |
| 1000 | Michael |
| 8080 | Julia |
| 96900 | Ada |
| 96901 | Adam |
| 900301 | Python |
+--------+---------+
7 rows in set (0.01 sec)
mysql>
对返回的数据按降序排列:
mysql> SELECT id, name
-> FROM user
-> ORDER BY name DESC #加DESC关键字
-> ;
mysql> SELECT id, name
-> FROM user
-> ORDER BY name DESC
-> ;
+--------+---------+
| id | name |
+--------+---------+
| 101 | Sarah |
| 900301 | Python |
| 1000 | Michael |
| 8080 | Julia |
| 100 | Alice |
| 96901 | Adam |
| 96900 | Ada |
+--------+---------+
7 rows in set (0.02 sec)
mysql>
对返回的数据按多个列排序(其中有升序,有降序):
对id 降序排列,对name升序排列
mysql> SELECT id, name
-> FROM user
-> ORDER BY id DESC, name
-> ;
mysql> SELECT id, name
-> FROM user
-> ORDER BY id DESC, name
-> ;
+--------+---------+
| id | name |
+--------+---------+
| 900301 | Python |
| 96901 | Adam |
| 96900 | Ada |
| 8080 | Julia |
| 1000 | Michael |
| 101 | Sarah |
| 100 | Alice |
+--------+---------+
7 rows in set (0.00 sec)
mysql>
获取一列中最大或最小值:
用ORDER BY 与 LIMIT组合:
mysql> SELECT id
-> FROM user
-> ORDER BY id DESC
-> LIMIT 1
-> ;
mysql> SELECT id
-> FROM user
-> ORDER BY id DESC
-> LIMIT 1
-> ;
+--------+
| id |
+--------+
| 900301 |
+--------+
1 row in set (0.00 sec)
mysql>
三、过滤数据(第六章)
1、使用WHERE子句:
mysql> SELECT id, name
-> FROM user
-> WHERE id = 100
-> ;
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。
WHERE子句在表名(FROM子句)之后给出,如下所示:
mysql> SELECT id, name
-> FROM user
-> WHERE id = 100
-> ;
+-----+-------+
| id | name |
+-----+-------+
| 100 | Alice |
+-----+-------+
1 row in set (0.07 sec)
mysql>
WHERE子句操作符:
操 作 符 说 明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 在指定的两个值之间
下例中‘ada’是字符串类型,将值与串类型的列相比较,需要限定引号。
mysql> SELECT id, name
-> FROM user
-> WHERE name = 'ada'
-> ;
mysql> SELECT id, name
-> FROM user
-> WHERE name = 'ada'
-> ;
+-------+------+
| id | name |
+-------+------+
| 96900 | Ada |
+-------+------+
1 row in set (0.00 sec)
mysql>
2、范围值检查:
mysql> SELECT id, name
-> FROM user
-> WHERE id BETWEEN 1000 AND 100000
-> ;
mysql> SELECT id, name
-> FROM user
-> WHERE id BETWEEN 1000 AND 100000
-> ;
+-------+---------+
| id | name |
+-------+---------+
| 1000 | Michael |
| 8080 | Julia |
| 96900 | Ada |
| 96901 | Adam |
+-------+---------+
4 rows in set (0.05 sec)
mysql>
3、空值检查(6.24 不太理解):
mysql> SELECT id,name
-> FROM user
-> WHERE name IS NULL
-> ;
由于表中的name没有空值,所以没有检索出数据
mysql> SELECT id,name
-> FROM user
-> WHERE name IS NULL
-> ;
Empty set (0.01 sec)
mysql>
四、数据过滤(第七章)
MySQL允许给出多个WHERE子句。这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用。
1、使用 AND 操作符:
2、使用OR 操作符:
3、计算次序:(使用())
4、使用 IN 操作符:
5、使用 NOT 操作符:
1、使用 AND 操作符:
mysql> SELECT id, name, email
-> FROM user
-> WHERE id<10000 AND id>100
-> ;
选择 id <10000 且 id >100的数据
mysql> SELECT id, name, email
-> FROM user
-> WHERE id<10000 AND id>100
-> ;
+------+---------+---------------------+
| id | name | email |
+------+---------+---------------------+
| 101 | Sarah | sarah@test.org |
| 1000 | Michael | michael@example.org |
| 8080 | Julia | Julia@test.org |
+------+---------+---------------------+
3 rows in set (0.00 sec)
mysql>
2、使用OR 操作符:
mysql> SELECT id, name, email
-> FROM user
-> WHERE name='Alice' OR id=101
-> ;
mysql> SELECT id, name, email
-> FROM user
-> WHERE name='Alice' OR id=101
-> ;
+-----+-------+----------------+
| id | name | email |
+-----+-------+----------------+
| 100 | Alice | alice@test.org |
| 101 | Sarah | sarah@test.org |
+-----+-------+----------------+
2 rows in set (0.00 sec)
mysql>
3、计算次序:
SQL语法中 AND优先级高于 OR ,要保证正确的计算WHERE后的匹配条件,可以用()明确分组相应的操作符。
mysql> SELECT id,name,email
-> FROM user
-> WHERE (id=100 OR id= 1000) AND last_modified >1000
-> ;
mysql> SELECT id,name,email
-> FROM user
-> WHERE (id=100 OR id= 1000) AND last_modified >1000
-> ;
+------+---------+---------------------+
| id | name | email |
+------+---------+---------------------+
| 100 | Alice | alice@test.org |
| 1000 | Michael | michael@example.org |
+------+---------+---------------------+
2 rows in set (0.02 sec)
mysql>
4、使用 IN 操作符:
IN后边的()内,列举所有合法取值。IN的功能与OR 相当。
IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。
mysql> SELECT id,name
-> FROM user
-> WHERE id IN(100,101,96901)
-> ORDER BY name
-> ;
mysql> SELECT id,name
-> FROM user
-> WHERE id IN(100,101,96901)
-> ORDER BY name
-> ;
+-------+-------+
| id | name |
+-------+-------+
| 96901 | Adam |
| 100 | Alice |
| 101 | Sarah |
+-------+-------+
3 rows in set (0.00 sec)
mysql>
5、使用 NOT 操作符:
否定之后的条件
mysql> SELECT id,name
-> FROM user
-> WHERE id NOT IN(100,101,96901)
-> ORDER BY name
-> ;
mysql> SELECT id,name
-> FROM user
-> WHERE id NOT IN(100,101,96901)
-> ORDER BY name
-> ;
+--------+---------+
| id | name |
+--------+---------+
| 96900 | Ada |
| 8080 | Julia |
| 1000 | Michael |
| 900301 | Python |
+--------+---------+
4 rows in set (0.01 sec)
mysql>
五、用通配符进行过滤(第八章)
为在搜索子句中使用通配符,必须使用LIKE操作符。 LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。
通配符搜索的处理时间比前边提到的搜索时间要长,使用时要注意:
1)不要过度使用通配符,能用其他操作符的,用其他操作符。
2)尽量不要把通配符置于搜索模式的开始处,这样搜索起来,是最慢的。
3)注意通配符的位置,位置放错,可能不会返回想要的数据。
1、使用百分号(%), %代表任意字符出现任意次数 。
mysql> SELECT id,name
-> FROM user
-> WHERE name LIKE 'A%'
-> ;
搜索名字以 ‘A’,开头的数据(默认不区分大小写,若要区分需要修改MySQL的配置方式)
mysql> SELECT id,name
-> FROM user
-> WHERE name LIKE 'A%'
-> ;
+-------+-------+
| id | name |
+-------+-------+
| 100 | Alice |
| 96900 | Ada |
| 96901 | Adam |
+-------+-------+
3 rows in set (0.00 sec)
mysql>
搜索名字里带有 ‘da’的数据。
mysql> SELECT id,name
-> FROM user
-> WHERE name LIKE '%da%'
-> ;
mysql> SELECT id,name
-> FROM user
-> WHERE name LIKE '%da%'
-> ;
+-------+------+
| id | name |
+-------+------+
| 96900 | Ada |
| 96901 | Adam |
+-------+------+
2 rows in set (0.00 sec)
mysql>
2、使用下划线(), 代表任意字符出现一次 。
mysql> SELECT id,name
-> FROM user
-> WHERE name LIKE '_da'
-> ;
mysql> SELECT id,name
-> FROM user
-> WHERE name LIKE '_da'
-> ;
+-------+------+
| id | name |
+-------+------+
| 96900 | Ada |
+-------+------+
1 row in set (0.64 sec)
mysql>
六、用正则表达式进行搜索(第九章)
注意:MySQL中的正则表达式匹配(自版本3.23.4后)不区分大小写(即,大写和小写都匹配)。为区分大小写,可使用 BINARY 关键字,如 :
WHERE prod_name REGEXP BINARY 'JetPack .000'。#书中例句
1、基本字符匹配。
a)
mysql> SELECT id,name
-> FROM user
-> WHERE name REGEXP 'da'
-> ORDER BY name
-> ;
mysql> SELECT id,name
-> FROM user
-> WHERE name REGEXP 'da'
-> ORDER BY name
-> ;
+-------+------+
| id | name |
+-------+------+
| 96900 | Ada |
| 96901 | Adam |
+-------+------+
2 rows in set (0.09 sec)
mysql>
b)使用‘.’,进行匹配,‘.’代表一个任意字符。
mysql> SELECT id,name
-> FROM user
-> WHERE name REGEXP 'da.'
-> ORDER BY name
-> ;
+-------+------+
| id | name |
+-------+------+
| 96901 | Adam |
+-------+------+
1 row in set (0.00 sec)
mysql>
2、使用 OR 进行匹配
mysql> SELECT id,name
-> FROM user
-> WHERE name REGEXP 'Ada|Adam'
-> ORDER BY name
-> ;
使用OR 搜索两个字符串之一
mysql> SELECT id,name
-> FROM user
-> WHERE name REGEXP 'Ada|Adam'
-> ORDER BY name
-> ;
+-------+------+
| id | name |
+-------+------+
| 96900 | Ada |
| 96901 | Adam |
+-------+------+
2 rows in set (0.02 sec)
mysql>
也可以给出两个以上条件:
WHERE name REGEXP 'a|b|c'
3、匹配几个字符之一:
使用[]
WHERE name REGEXP '[abc]da' #匹配ada,bda,cda
否定字符集:
WHERE name REGEXP '[^abc]' #匹配a,b,c,之外的任意字符。
七、创建计算字段(第十章)
从数据库中检索出转换、计算或格式化过的数据
计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的。
计算字段操作方法:
1、拼接字段:
使用 Concat()函数,可以将多个串连接起来,形成一个较长的串。
多数DBMS使用+或||来实现拼接,MySQL则使用Concat()函数来实现。
当把SQL语句转换成MySQL语句时一定要把这个区别铭记在心。
mysql> SELECT Concat(name,'(',id,')')
-> FROM user
-> ORDER BY name
-> ;
+-------------------------+
| Concat(name,'(',id,')') |
+-------------------------+
| Ada(96900) |
| Adam(96901) |
| Alice(100) |
| Julia(8080) |
| Michael(1000) |
| Python(900301) |
| Sarah(101) |
+-------------------------+
7 rows in set (0.00 sec)
mysql>
2、使用别名
使用 AS 给新检索出的字段起别名
mysql> SELECT Concat(RTrim(name),'_',id) AS name_id
-> FROM user
-> ORDER BY name
-> ;
+---------------+
| name_id |
+---------------+
| Ada_96900 |
| Adam_96901 |
| Alice_100 |
| Julia_8080 |
| Michael_1000 |
| Python_900301 |
| Sarah_101 |
+---------------+
7 rows in set (0.01 sec)
mysql>
别名的其他用途 别名还有其他用途。常见的用途包括在实际的表列名包含不符合规定的字符(如空格)时重新命名它,在原来的名字含混或容易误解时扩充它,等等。
导出列 别名有时也称为导出列( derived column),不管称为什么,它们所代表的都是相同的东西。
3、执行算数计算
MySQL支持 ‘+’,‘-’,‘*’,‘/’四种运算。同时可用()区分优先顺序。
mysql> SELECT id, name, id+1000 AS id_1000
-> FROM user
-> ;
+--------+---------+---------+
| id | name | id_1000 |
+--------+---------+---------+
| 100 | Alice | 1100 |
| 101 | Sarah | 1101 |
| 1000 | Michael | 2000 |
| 8080 | Julia | 9080 |
| 96900 | Ada | 97900 |
| 96901 | Adam | 97901 |
| 900301 | Python | 901301 |
+--------+---------+---------+
7 rows in set (0.17 sec)
mysql>
SELECT 提供了测试和实验函数的方法,例如:
mysql> SELECT 3*8
-> ;
+-----+
| 3*8 |
+-----+
| 24 |
+-----+
1 row in set (0.00 sec)
mysql>
或:
mysql> SELECT Trim(' abc ')
-> ;
+----------------+
| Trim(' abc ') |
+----------------+
| abc |
+----------------+
1 row in set (0.02 sec)
mysql>
利用 NOW(),可以返回当前日期和时间。
mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2017-12-27 17:47:00 |
+---------------------+
1 row in set (0.02 sec)
mysql>
八、使用数据处理函数(第十一章)
注意:函数的可移植性不强,为了代码的可移植,许多SQL程序员不赞成使用特殊实现的功能。如果你决定使用函数,应该保证做好代码注释,以便以后你(或其他人)能确切地知道所编写SQL代码的含义。
大多数SQL实现支持以下类型的函数。
1)用于处理文本串(如删除或填充值,转换值为大写或小写)的文本函数。
2)用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数。
3)用于处理日期和时间值并从这些值中提取特定成分(例如,返回两个日期之差,检查日期有效性等)的日期和时间函数。
4)返回DBMS正使用的特殊信息(如返回用户登录信息,检查版本细节)的系统函数。
1、文本处理函数:
例:
使用Upper()函数,将字母转换成大写。
mysql> SELECT id, name,Upper(name) AS name_upper
-> FROM user
-> ORDER BY name
-> ;
+--------+---------+------------+
| id | name | name_upper |
+--------+---------+------------+
| 96900 | Ada | ADA |
| 96901 | Adam | ADAM |
| 100 | Alice | ALICE |
| 8080 | Julia | JULIA |
| 1000 | Michael | MICHAEL |
| 900301 | Python | PYTHON |
| 101 | Sarah | SARAH |
+--------+---------+------------+
7 rows in set (0.00 sec)
mysql>
常用的文本处理函数
函 数 说 明
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写
SOUNDEX需要做进一步的解释。 SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。 SOUNDEX考虑了类似的发音字符和音节,使得能对串进行发音比较而不是字母比较。虽然SOUNDEX不是SQL概念,但MySQL(就像多数DBMS一样)都提供对SOUNDEX的支持。
下面给出一个使用Soundex()函数的例子。 customers表中有一个顾客Coyote Inc.,其联系名为Y.Lee。但如果这是输入错误,此联系名实际应该是Y.Lie,怎么办?显然,按正确的联系名搜索不会返回数据,如下所示:
现在试一下使用Soundex()函数进行搜索,它匹配所有发音类似于Y.Lie的联系名:
分析:在这个例子中, WHERE子句使用Soundex()函数来转换cust_contact列值和搜索串为它们的SOUNDEX值。因为Y.Lee和Y.Lie发音相似,所以它们的SOUNDEX值匹配,因此WHERE子句正确地过滤
出了所需的数据。
2、日期和时间处理函数
日期和时间采用相应的数据类型和特殊的格式存储,以便能快速和有效地排序或过滤,并且节省物理存储空间。
一般,应用程序不使用用来存储日期和时间的格式,因此日期和时间函数总是被用来读取、统计和处理这些值。由于这个原因,日期和时间函数在MySQL语言中具有重要的作用
MySQL的4.1.1更早期版本不支持全部的日期时间函数,使用时需要注意
常用日期和时间处理函数
函 数 说 明
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分
九、汇总数据(第十二章)
聚集函数用来汇总数据。 MySQL支持一系列聚集函数,可以用多种方法使用它们以返回所需的结果。这些函数是高效设计的,它们返回结果一般比你在自己的客户机应用程序中计算要快得多。
1、聚集函数
我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数。使用这些函数, MySQL查询可用于检索数据,以便分析和报表生成。这种类型的检索例子有以下几种。
1)确定表中行数(或者满足某个条件或包含某个特定值的行数)。
2)获得表中行组的和。
3)找出表列(或所有行或某些特定的行)的最大值、最小值和平均值。
实际想要的是汇总信息。
聚集函数( aggregate function) 运行在行组上,计算和返回单个值的函数。
SQL聚集函数
函 数 说 明
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和
标准偏差: MySQL还支持一系列的标准偏差聚集函数,但目前并未涉及这些内容。
例:
mysql> SELECT COUNT(id) AS id_count
-> FROM user
-> ;
+----------+
| id_count |
+----------+
| 7 |
+----------+
1 row in set (0.00 sec)
mysql>
注意:
对于 COUNT(), 如果指定列名,则指定列的值为空的行被COUNT()函数忽略,但如果COUNT()函数中用的是星号( *),则不忽略。
只用于单个列 AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数。
NULL值 AVG()函数忽略列值为NULL的行。
对非数值数据使用MAX()(或MIN()) 虽然MAX()(或MIN())一般用来找出最大(最小)的数值或日期值,但MySQL允许将它用来返回任意列中的最大(最小)值,包括返回文本列中的最大(最小)值。在用于文本数据时,如果数据按相应的列排序,则MAX()(或MIN())返回最后一行。
NULL值 MAX()(或MIN())函数忽略列值为NULL的行。
在多个列上进行计算 如本例所示,利用标准的算术操作符,所有聚集函数都可用来执行多个列上的计算。
NULL值 SUM()函数忽略列值为NULL的行。
mysql> SELECT SUM(id*10) AS id_sum_10
-> FROM user
-> ;
+-----------+
| id_sum_10 |
+-----------+
| 11033830 |
+-----------+
1 row in set (0.02 sec)
mysql>
2、聚集不同值
MySQL 5 及 后 期 版 本 下 面 将 要 介 绍 的 聚 集 函 数 的DISTINCT的使用,已经被添加到MySQL 5.0.3中。下面所述内容在MySQL 4.x中不能正常运行。
聚集函数默认操作所有值,制定DISTINCE 之后,只操作不同的值。
mysql> SELECT SUM(DISTINCT id) AS id_sum
-> FROM user
-> ;
+---------+
| id_sum |
+---------+
| 1103383 |
+---------+
1 row in set (0.20 sec)
mysql>
3、组合聚集函数
SELECT 语句可包含多个聚集函数:
mysql> SELECT COUNT(id) AS id_count,
-> MAX(last_modified) AS last_max,
-> MIN(last_modified) AS last_min
-> FROM user
-> ;
+----------+----------------+----------------+
| id_count | last_max | last_min |
+----------+----------------+----------------+
| 7 | 1513922215.956 | 1513922213.702 |
+----------+----------------+----------------+
1 row in set (0.03 sec)
mysql>