SQL基础学习3

来源:互联网 发布:公司网络维护 编辑:程序博客网 时间:2024/06/04 20:05

对表进行聚合查询

聚合函数:通过SQL对数据进行某种操作或计算是需要使用的函数,常见的聚合函数(或称为合计函数)如下:

COUNT:计算表中的记录数(行数);

SUM:计算表中数值列的数据合计值;(只适用于数值类型)

AVG:计算表中数值列的数据平均值;(只适用于数值类型)

MAX:求出表中任意列中数据的最大值;(适用于所有数据类型)

MIN:求出表中任意列中数据的最小值;(适用于所有数据类型)

聚合函数会将NULL排除在外。

计算表中数据的行数:参数列不同计算结果也会发生变化

- -计算全部数据行数SELECT COUNT(*)FROM 表名;
解释:此语句的执行结果包含了空值的行。

注意:其它聚合函数都不能以星号作为参数。


--计算NULL之外的数据行数SELECT COUNT(列名)FROM 表名;
解释:此语句的执行结果为统计“列名”的行数,不包含该列名中的NULL;

计算合计值:

SELECT SUM(列名)FROM 表名;
解释:求出“列名”所有非空值的和


计算平均值:

SELECT AVG(列名)FROM 表名;
解释:计算“列名所有非空值的平均值”

若要计算包含NULL的平均值则:

计算最大值和最小值:

SELECT MAX(列名1),MIN(列名2)FROM 表名;
解释:找出列名1的最大值,列名2的最小值


使用聚合函数删除重复值:

SELECT COUNT(DISTINCT 列名)FROM 表名;
解释:删除重复的列名,再计算行数

注意:DISTINCT必须写在括号内,若写成  SELECT DISTINCT COUNT(列名)  则会变成先计算行数,再删除重复的列名

在上述五类聚合函数中都可以使用DISTINCT来删除对重复数据的处理。


对表进行分组
GROUP BY 子句:

--使用GROUP BY子句进行聚合的语法SELECT 列名1,列名2,列名3, ...FROM 表名GROUP BY 列名1,列名2,列名3, ...;
解释:按照列名1、列名2、列名3对表中的数据进行分组。其中,GROUP BY子句中指定的列称为聚合键分组列

注意:使用逗号分隔指定的多列;其书写位置一定要写在FROM语句之后。SQL子句的顺序不能改变,也不能互相替换。

聚合键中包含NULL的情况:NULL也会作为一组特定的数据表示

使用WHERE子句时GROUP BY的执行结果:

SELECT 列名1,列名2,列名3, ...FROM 表名WHEREGROUP BY 列名1,列名2,列名3, ...;
解释:先根据WHERE子句指定的条件进行过滤,然后再进行聚合处理

子句的书写顺序:SELECT->FROM->WHERE->GROUP BY
子句的执行顺序:FROM->WHERE->GROUP BY->SELECT

与聚合函数和GROUP BY子句有关的注意要点:

1.不能把聚合键之外的列名写在SELECT子句之中(SELECT子句中只能包含常数、聚合函数、聚合键

2.GROUP BY子句中不能使用列别名

3.GROUP BY子句的结果是随机的、无序的

4.不能在WHERE子句中使用聚合函数(只有在SELECT、HAVING、GROUP BY子句中使用聚合函数)


为聚合结果指定条件

HAVING子句:对集合指定条件

--HAVING子句的语法SELECT 列名1,列名2,列名3, ...FROM 表名GROUP BY 列名1,列名2,列名3, ...HAVING 分组结果对应的条件;

子句的书写顺序:SELECT->FROM->WHERE->GROUP BY->HAVING

注意:HAVING子句必须写在GROUP BY子句之后;HAVING子句中能使用的3种要素为常数、聚合函数、聚合键

相对于HAVING子句,更适合写在WHERE子句中的条件是:聚合键所对应的条件


对查询结果进行排序

ORDER BY子句:

SELECT 列名1,列名2,列名3, ...FROM 表名ORDER BY 排序基准列1,排序基准列2, ...;
子句的书写顺序:SELECT->FROM->WHERE->GROUP BY->HAVING->ORDER BY

子句的执行顺序FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY

指定升序或降序:

未指定ORDER BY子句中排序顺序时会默认使用升序进行排序(或在列名后使用关键字ASC),若要进行降序排列时在列名后使用DESC关键字。

SELECT 列名1,列名2,列名3, ...FROM 表名ORDER BY 排序基准列1 DESC;

指定多个排序键:可以同时使用2个或2个以上的排序键

优先使用左侧的键,如果该列存在相同值的话,会接着参考右侧的键

NULL的顺序:排序键中包含NULL时,会在开头或末尾进行汇总

ORDER BY子句中可以使用SELECT子句中定义的别名

ORDER BY子句中可以使用SELECT子句未使用的列和聚合函数

ORDER BY子句中可以不要使用列编号




0 0