Oracle学习day-29:组函数、子查询
一、组函数
1.什么是组函数?
组函数操作行集,给出每组的结果。组函数不象单行函数,组函数对行的集合进行操作, 对每组给出一个结果。这些集合可能是整个表或者是表分成的组。
2.组函数与单行函数的区别:
1)单行函数对查询到每个结果集做处理,而组函数只对分组数据做处理。
3)单行函数对每个结果集返回一个结果,而组函数对每个分组返回一个结果。
3.组函数的类型:
1)AVG(arg)函数:对分组数据做平均值运算。
2)SUM(arg)函数:对分组数据求和。
3)COUNT 函数:返回一个表中的行数
4)MIN(arg)函数:求分组中最小数据。
5)MAX(arg)函数:求分组中最大数据。
(1)组函数参数的数据类型:
1)用于函数的参数的数据类型可以是 CHAR、VARCHAR2、NUMBER 或 DATE。
2)所有组函数忽略空值。为了用一个值代替空值,用 NVL、NVL2 或 COALESCE 函
数。
注意:AVG 和 SUM 函数的参数类型只能是数字类型; MIN 和 MAX 函数的参数类型可以是字符、数字、日期。
(3)使用 AVG 和 SUM 函数:
select avg(列名) ,sum(列名) from 表名;
(4)使用 MIN 和 MAX 函数:
select min(列名),max(列名) from 表名;
(5)使用 COUNT 函数:返回一个表中的行数。
COUNT 函数有三种格式:
1)COUNT(*) :返回表中满足 SELECT 语句标准的行数,包括重复行,包括有空值列的行。
2)COUNT(expr) :返回在列中的由 expr 指定的非空值的数。
3)COUNT(DISTINCTexpr):使用 DISTINCT 关键字禁止计算在一列中的重复值。
4.创建数据组
(1)什么是数据组?
可以根据需要将查询到的结果集信息划分为较小的组,用 GROUPBY 子句实现。
(2)GROUPBY 子句语法:
GROUPBY 子句:GROUPBY 子句可以把表中的行划分为组。然后可以用组函数返回 每一组的摘要信息。
(3)GROUPBY 子句的执行顺序:
先进行数据查询,在对数据进行分组,然后执行组函数。
注意:
1)在 SELECT 列表中的任何列必须在 GROUPBY 子句中。
2)在 GROUPBY 子句中的列或表达式不必在 SELECT 列表中。
5.约束分组结果
(1)什么是HAVING子句?
HAVING 语句通常与 GROUPBY 语句联合使用,用来过滤由 GROUPBY 语句返回的记 录集。 HAVING 语句的存在弥补了 WHERE 关键字不能与聚合函数联合使用的不足。
(2)HAVING 子句语法:
(3)嵌套组函数
在使用组函数时我们也可以根据需要来做组函数的嵌套使用。
select max(avg(列名)) from 表名 group by 列名;
二、子查询
1.什么是子查询?
子查询是一个 SELECT 语句,它是嵌在另一个 SELECT 语句中的子句。
2.子查询语法:
1) 子查询在主查询之前执行一次 ;
2)子查询的结果被用于主查询 ;
3)可以将子查询放在:WHERE 子句 、HAVING 子句 和FROM 子句中。
3.使用子查询:
可以用组合两个查询的方法解决这个问题,放置一个查询到另一个查询中。内查询或子 查询返回一个值给外查询或主查询。使用一个子查询相当于执行两个连续查询并且用第一个 查询的结果作为第二个查询的搜索值。
(1)子查询的原则:
1)子查询放在圆括号中。
2)将子查询放在比较条件的右边。
3)在单行子查询中用单行运算符,在多行子查询中用多行运算符。
4.单行子查询:
子查询语句只返回一行的查询,使用单行比较符。
(1)主查询对子查询结果的单行比较运算符:
(2)在子查询中可以使用组函数,可以在 WHERE 子句中使用子查询,也可以在 HAVING 子句中使用子查询。
注意:子查询错误,使用子查询的一个常见的错误是单行子查询返回了多行。
5.多行子查询:
子查询语句返回多行的查询,使用多行比较符。
(1)主查询对子查询的多行比较运算符(在条件中也可使用 NOT 取反):
(2)在多行子查询中使用 IN 运算符:
(3)在多行子查询中使用 ANY 运算符(<ANY 意思是小于最大值。 >ANY 意思是大于最小值):
(4)在多行子查询中使用 ALL 运算符(<ALL 意思是小于最小值。>ALL 意思是大于最大值):