SELECT 语句的一般格式:
SELECT [ALL|DISTINCT] <目标列表达式>[别名][,<目标列表达式> [别名]] ...
FROM <表名/视图名> [别名] [, <表名/视图名> [别名]]... | (<select 语句>) [AS] <别名>
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC | DESC]];
1. 目标列表达式的可选格式
(1) *
(2)<表名.>*
(3)COUNT([DISTINCT|ALL] *)
(4) [<表名.>]<属性列名表达式>[,
[<表名.>]<属性列名表达式>
]...
Tips:
<属性列名表达式> 可以是由属性列、作用于属性列的聚集函数、属性和常量的任意算术运算(+、-、*、/)组成的运算公式。
eg. 表达式
mysql> SELECT Sname,2016-Sage FROM Student;
+--------+-----------+
| Sname | 2016-Sage |
+--------+-----------+
| Jason | 1995 |
| Taylor | 1995 |
| dsf | 1995 |
+--------+-----------+
3 rows in set (0.03 sec)
eg. 字符串常量、函数
mysql> SELECT Sname,'Year of Birth:',2016-Sage,LOWER(Sdept) FROM Student; // 小写字母表示系名
+--------+----------------+-----------+--------------+
| Sname | Year of Birth: | 2016-Sage | LOWER(Sdept) |
+--------+----------------+-----------+--------------+
| Jason | Year of Birth: | 1995 | ele |
| Taylor | Year of Birth: | 1995 | ele |
| dsf | Year of Birth: | 1995 | ele |
+--------+----------------+-----------+--------------+
3 rows in set (0.05 sec)
eg. 查询时可以指定别名,这对于算术表达式、常量、函数名的目标列表达尤为有用.
mysql> SELECT Sname NAME,'Year of Birth:' BIRTH,2016-Sage BIRTHDAY,LOWER(Sdept) DEPARTMANT FROM Student;
+--------+----------------+----------+------------+
| NAME | BIRTH | BIRTHDAY | DEPARTMANT | // 指定别名,界面友好性。
+--------+----------------+----------+------------+
| Jason | Year of Birth: | 1995 | ele |
| Taylor | Year of Birth: | 1995 | ele |
| dsf | Year of Birth: | 1995 | ele |
+--------+----------------+----------+------------+
3 rows in set (0.00 sec)
2.聚集函数的一般格式
COUNT(*) 统计元组的个数
COUNT([DISTINCT|ALL] <列名>) 统计一列中值的个数
SUM([DISTINCT|ALL] <列名>) 计算一列值的总和(此列必须是数值型)
AVG
([DISTINCT|ALL] <列名>) 计算一列值的平均值(
此列必须是数值型
)
MAX(
[DISTINCT|ALL] <列名>
) 求一列值中的最大值
MIN(
[DISTINCT|ALL] <列名>
) 求一列值中的最小值
DISTINC 短语,指明在计算时要取消指定列中的重复值。默认为ALL,表示不取消重复值。
当聚集函数遇到空值时,除COUNT(*)外,都跳过空值而只处理非空值。 COUNT(*)对元组进行计数时,包含空值所在的元组。
注意: WHERE 子句中是不能用聚集函数作为条件表达式的。 聚集函数只能用于 SELECT子句 和 GROUP BY 中的 HAVING 子句。
SELECT COUNT(*) FROM Student; // 查询学生总人数
mysql> SELECT COUNT(*) FROM Student; +----------+ | COUNT(*) | +----------+ | 3 | +----------+ 1 row in set (0.04 sec)
SELECT COUNT(DISTINCT Sno) FROM SC