sql语句有关where,group by,having的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句有关where,group by,having的问题相关的知识,希望对你有一定的参考价值。

一直搞不太清楚。。。
谈谈我自己的理解:
1. where里的语句会优先在筛选之前就把不符合的删掉
2. 当有group by存在,但where里的字段不出现在group by里的时候,where语句会失效!
3. having后面才能跟聚合函数,聚合函数是针对group by后面的字段的
4. having里的语句会在筛选之后再把不符合的删掉

不知我的理解正确否?
请了解的指教,不甚感激!

1.对WHERE理解基本正确
2.HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。
以上一段是我拷过来的,实际就是说,having 的效果,和where是差不多的。差别在于分组前可以where 但是group by 分组后,显然不能再次where,所以要用having。

参考资料:http://baike.baidu.com/view/1265760.htm?fr=ala0_1

参考技术A 第一条:
where相当与一个限制条件,就是过滤那些不符合条件的结果,但并不是删除!简单说就是显示符合条件的数据!
第二条:
在者,group by 中不允许出现where 其用做限制条件的关键字是having,用where会报错的!
第三条理解正确!
having 的作用于where是一样的都起到的时过滤作用。
小小建议:计算机这方面语言要严谨些! ^_^
希望有所帮助!
参考技术B 教你个办法,去看sqlserver的执行计划,就会看到sql执行的先后顺序。sql会先执行where子句,取出合适的行之后,再group by.

最好有实际的sql,才知道你说的是什么意思。
参考技术C 理解正确

以上是关于sql语句有关where,group by,having的问题的主要内容,如果未能解决你的问题,请参考以下文章

SQL里面group by 语句和WHERE的区别,高手进

sql语句select group by order by where一般先后顺序

sql语句select group by order by where一般先后顺序

sql语句select group by order by where一般先后顺序

SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序?

SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序?