第九章 汇总数据
1、聚集函数用来进行记录数据的加工,然后再进行返回。
2、SQL的聚集函数:
函数 | 说明 |
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行数 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
SUM() | 返回某列值之和 |
3、AVG()函数
AVG可以用来计算所有列的平均值,也可以计算返回某行或者某列的平均值
SELECT AVG(DISTINCT Maths) AS res FROM transcript;
4、COUNT()函数
COUNT()函数进行计数。可利用 COUNT()确定表中行的数目或符合特定 条件的行的数目。
COUNT()函数有两种使用方式:
使用 COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值 (NULL)还是非空值。
SELECT COUNT(*) FROM transcript;
使用 COUNT(column)对特定列中具有值的行进行计数,忽略 NULL 值。
SELECT COUNT(Name) FROM transcript;
5、MAX()函数
MAX()返回指定列中的最大值。MAX()要求指定列名
SELECT MAX(Maths) FROM transcript;
如果是对非数值类型(即文本类型)采用MAX函数查询,则会返回字符排序最靠后的一行记录
SELECT MAX(Name) FROM transcript;
MAX()函数忽略列值为 NULL 的行
6、MIN()函数
MIN()的功能正好与 MAX()功能相反,它返回指定列的最小值。与 MAX() 一样,MIN()要求指定列名
7、SUM()函数
SUM()用来返回指定列值的和
SELECT SUM(Maths) FROM transcript;
SELECT SUM(Name) FROM transcript;
SUM()也可以用来合计计算值
SELECT SUM(Maths+English) FROM transcript;
8、多个聚合函数可以同时组合使用在同一个查询条件中
SELECT SUM(Maths+English) AS TOTAL, MAX(Maths) as MaxMaths, MIN(English) as MinEnglish FROM transcript;
第十章 分组数据
2、GROUP BY子句用于创建分组,将查询到的数据以GROUP BY的子句条件进行分组
未分组:
SELECT Name, Count(Name) FROM transcript ;
SELECT Name, Count(Name) FROM transcript GROUP BY Name;
3、GROUP BY 子句可以包含任意数目的列,因而可以对分组进行嵌套, 更细致地进行数据分组
4、如果在 GROUP BY 子句中嵌套了分组,数据将在最后指定的分组上进 行汇总。
5、 GROUP BY 子句中列出的每一列都必须是检索列或有效的表达式(但 不能是聚集函数)。如果在 SELECT 中使用表达式,则必须在 GROUP BY 子句中指定相同的表达式。不能使用别名。
6 、大多数 SQL 实现不允许 GROUP BY 列带有长度可变的数据类型(如文 本或备注型字段)。
7 、除聚集计算语句外,SELECT 语句中的每一列都必须在 GROUP BY 子句 中给出。
8 、如果分组列中包含具有 NULL 值的行,则 NULL 将作为一个分组返回。 如果列中有多行 NULL 值,它们将分为一组。
9 、GROUP BY 子句必须出现在 WHERE 子句之后,ORDER BY 子句之前。
10、 HAVING类似于WHERE,但是WHERE不能过滤分组,但是HAVING是可以用来进行过滤分组的
SELECT Name, Count(Name) FROM transcript GROUP BY Name HAVING Name != 'Ben';
11 、HAVING 支持所有 WHERE 操作符,但是WHERE无法实现分组过滤
第十一章 使用子查询
1、子查询即嵌套在其他查询中的查询,在多张表存在关联关系,需要根据A表的查询信息作为B表的查询条件进行查询,就需要用到子查询
例如有两张表,一张记录分数等级,一张记录学生成绩
score_level 分数等级表
现在想查询Maths成绩为A的学生名单
SELECT Name, Maths FROM transcript WHERE Maths >= (SELECT score FROM score_level WHERE level = 'A');
2 、作为子查询的 SELECT 语句只能查询单个列。企图检索多个列将返回错误
第十二张 联结表
1、 为什么使用联结:联结是一种机制,用来在一条 SELECT 语句 中关联表,因此称为联结。使用特殊的语法,可以联结多个表返回一组 输出,联结在运行时关联表中正确的行
2 、创建联结示例
transcript表
示例:
SELECT B.Name, A.Maths, A.English FROM transcript A, student_id B WHERE A.Name = B.Name;
3、 内联结INNER JOIN
内连接查询能将左表(表 A)和右表(表 B)中能关联起来的数据连接后返回。
SELECT A.Name, A.Maths, A.English FROM transcript A INNER JOIN student_id B ON A.Name = B.Name;
4、扩展其他联结方式
左联结 LEFT(OUTER ) JOIN
左连接查询会返回左表(表 A)中所有记录,不管右表(表 B)中有没有关联的数据。在右表中找到的关联数据列也会被一起返回。
SELECT A.Name, A.Maths, A.English FROM transcript A LEFT JOIN student_id B ON A.Name = B.Name;
右联结 RIGHT(OUTER ) JOIN
右连接查询会返回右表(表 B)中所有记录,不管左表(表 A)中有没有关联的数据。在左表中找到的关联数据列也会被一起返回。
完全外联结 FULL(OUTER) JOIN
外连接查询能返回左右表里的所有记录,其中左右表里能关联起来的记录被连接后返回。