我是靠谱客的博主 落后大门,最近开发中收集的这篇文章主要介绍select 两个where_group by、where、having用法及顺序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

学习交流,欢迎留言~~

昨天学习SQL,碰到了个小问题:既然where和having都可以表示“有条件地筛选出想要的内容”,那么,它们的区别是什么呢?

肯定是有区别的,否则的话SQL语言体系当中没必要出现两个作用和适用场合一样的关键子句,那样太啰嗦了,绝不是一种有逻辑、自成体系的计算机语言会出现的情况~~

所以,查了资料,发现了where、having使用过程中的一些细节:

1、select子句及其顺序

b2ef0d6f48b648ec67cfc44d2c195cfc.png
图片摘自:MYSQL必知必会

0c176ca455b47bcdb4264c8f8bdc8d61.png
图片摘自:MYSQL必知必会

1)在SQL语句中,where子句并不是必须出现的

2)where子句是对检索记录中每一行记录的过滤。

3)having子句出现在group by子句后面。

where子句对检索结果中每一条记录第一次过滤后,group by对每条记录进行分组,having对各个组中的记录进行再次过滤。因此是先通过where子句过滤、再通过group by子句分组、最后通过having子句对组中记录再次进行过滤。

4)如果在一句SQL语句中,where子句和group by……having子句同时都有的话,必须where子句在前,group by……having子句在后。

即group by子句必须出现在where子句之后,having子句必须在group by子句之后。

(where先执行,再groupby分组;groupby先分组,having再执行)

5)group by子句是对检索记录的分组,后面跟随的字段名是分组的依据。根据语法,在select子句中,除聚合函数语句外,SELECT子句中的每个列名称都必须在GROUP BY子句中作为分组的依据。

比如说按照姓名分组的正确示范:

查出没门课程都大于80分的学生姓名,select name from table group by name having min(grade) > 80

(注意,where没有出现哦~~)

比如带着聚合函数的正确示范:

a452db15ce5e5438e6e61f3a534c2fc6.png
图片参考自博客https://blog.csdn.net/weixin_41512727/article/details/80697331

比如错误的示范:

select vend_id, count(*) , sales from products group by vend_id;
这个语句,其中sales字段,在group by中没有,所以查询的结果,sales的值是错误的!
摘自:group by 与 where, having以及顺序

把它改正确的方法是将sales字段添加到group by子句中,语法倒是正确了,但是不是有业务上的实际含义,这个就另说了。

最后

以上就是落后大门为你收集整理的select 两个where_group by、where、having用法及顺序的全部内容,希望文章能够帮你解决select 两个where_group by、where、having用法及顺序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部