SQL必知必会笔记(9~12章)

2024-01-09 00:55:05

第九章?汇总数据

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;

如果对文本类型进行操作,返回0
 SELECT SUM(Name) FROM transcript;

SUM()也可以用来合计计算值

 SELECT SUM(Maths+English) FROM transcript;

SUM()函数忽略列值为?NULL?的行。

8、多个聚合函数可以同时组合使用在同一个查询条件中

SELECT SUM(Maths+English) AS TOTAL, MAX(Maths) as MaxMaths, MIN(English) as MinEnglish FROM transcript;

第十章?分组数据

1、数据分组依赖两个函数GROUP?BY?和HAVING

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表

student_id表

示例:

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

外连接查询能返回左右表里的所有记录,其中左右表里能关联起来的记录被连接后返回。

文章来源:https://blog.csdn.net/qq_39974998/article/details/135467766
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。