Oracle中group by和having和where之间的细微之处

版权声明:版权所有,违者必究 https://blog.csdn.net/weixin_39921821/article/details/86621845

1.group by

首先单纯的就group by 来说吧,分组函数,它一般是和聚合函数配合使用的,但是它有一个重要的原则需要你记住就是==》在查询时select 和from之间=用到的所有列(字段)中,没有使用聚合函数的列,必须出现在 group by 后面,如下:

错误写法:

  select 字段1,字段2 from table group by 字段1          

正确写法: 

select 字段1,count(字段2) as 统计字段2的数量 from table group by 字段2 

2. having

首先它一般是和group by  搭配使用的,放在group by 后面,作为过滤条件使用,用来显示特定的组,也可以使用多个分组标准进行分组

注,在这个地方,having子句有所限制,要在SELECT语句中定义的列和聚合表达式上。

如下:

select 字段1 count(字段2) from table group by a having count(字段2)>2

3.where

首先在执行顺序上,它是仅排在from最近的,如:

扫描二维码关注公众号,回复: 5260822 查看本文章

select--》from--》where--》group by--》having--》order by

注:

from:需要从哪个数据表检索数据  
where:过滤表中数据的条件 
group by:如何将上面过滤出的数据分组 
having:对上面已经分组的数据进行过滤的条件  
select:查看结果集中的哪个列,或列的计算结果 
order by :按照什么样的顺序来查看返回的数据 

总结:

from后面的表关联,是自右向左解析的
而where条件的解析顺序是自下而上的。
也就是说,在写SQL语句的时候,尽量把数据量大的表放在最右边来进行关联,
而把能筛选出大量数据的条件放在where语句的最下面

猜你喜欢

转载自blog.csdn.net/weixin_39921821/article/details/86621845