Oracle学习day-29:组函数、子查询

2019-08-20  本文已影响0人  开源oo柒

一、组函数

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 意思是大于最大值):

上一篇下一篇

猜你喜欢

热点阅读