2016.3.28(聚合函数与分组、组合查询)

聚合函数的分类:

select count(列名) from 表名 —— 统计表中该列有多少行
默认列名的技术规范为all,可以使用distinct排除重复数据,过滤非空

select count(列名) from 表名 where 约束条件 —— 查询表中该列符合条件的行数

select sum(列名) from 表名 where 约束条件 —— 查询表中该列符合条件的值的总和

select avg(列名) from 表名where 约束条件 —— 查询表中该列符合条件的值得平均值

select max/min(列名) from 表名 where 约束条件 —— 查询表中该列符合条件的最大/最小值

max/min 没有all,distinct ,* 这些规范


过滤分组数据

标准结构 —— select 列A 聚合函数(聚合函数规范) from 表名 where 条件 group by 列A

多了分组只有列A 列B 一样的才分为一组 例如

select 班级,人数,count(*) as 人数 from t_student group by 班级年龄

在有分组的SQL语句中,投影的列就会有限制,要求select中的列必须满足一下两个条件之一:
1、使用了聚合函数的列 or 2、该列在group by子句中


having 标准结构:select 列A 聚合函数(聚合函数规范) from 表名 where 条件 group by 列A having 条件

where 后面不能接 聚合函数,having 后面可以

SQL语句完整执行顺序:1、from 2、where 3、group by 4、select 5、having 6、order by


组合查询

使用子查询

简单形式 —— select 列A ,(子查询) from 表名

在select中嵌套

标准形式 —— select 列A ,(子查询) from 表名
嵌套在select语句中要求查询的值只能是单行和单列

在from中嵌套

标准形式 —— select 列A,列B from (子查询)
from里的子查询可以是任意查询语句然后将其结果作为外部查询的表,例如:
select * from (selec 列A,列B from 表名)
上面的SQL语句虽然作用不大,但其说明from中嵌套的SQL语句不受任何限制,也就是说子查询结果可以为多行多列


在where中嵌套
标准结构:select 列A,列B from 表名 where 列运算符 (子查询)

All运算符:和子查询结果逐一比较,必须全部满足时表达式的值才为真
any运算符:和子查询结果逐一比较,其中一条记录满足条件则表达式的值就为真
exists/not exists 运算符:exists 判断子查询是否存在数据,如果存在则表达式为真,反之为假。not exists 反之。

posted @ 2016-03-28 22:11  稳重的橙子  阅读(176)  评论(0)    收藏  举报