以前在学校里学习过SQLserver数据库,发现学习的都是皮毛,今天以正确的姿态谈一下MySQL中where和having的区别。

误区:不要错误的认为having和group by 必须配合使用。

下面以一个例子来具体的讲解:

1. where和having都可以使用的场景

select goods_price,goods_name from sw_goods where goods_price > 100

1

select goods_price,goods_name from sw_goods having goods_price > 100

1

解释:上面的having可以用的前提是我已经筛选出了goods_price字段,在这种情况下和where的效果是等效的,但是如果我没有select

goods_price 就会报错!!因为having是从前筛选的字段再筛选,而where是从数据表中的字段直接进行的筛选的。

2. 只可以用where,不可以用having的情况

select goods_name,goods_number from sw_goods where goods_price > 100

1

select goods_name,goods_number from sw_goods having goods_price > 100 //报错!!!因为前面并没有筛选出goods_price 字段

1

3. 只可以用having,不可以用where情况

查询每种goods_category_id商品的价格平均值,获取平均价格大于1000元的商品信息

select goods_category_id , avg(goods_price) as ag from sw_goods group by goods_category having ag > 1000

1

select goods_category_id , avg(goods_price) as ag from sw_goods where ag>1000 group by goods_category //报错!!因为from sw_goods 这张数据表里面没有ag这个字段

1

注意:where

后面要跟的是数据表里的字段,如果我把ag换成avg(goods_price)也是错误的!因为表里没有该字段。而having只是根据前面查询出来的是什么就可以后面接什么。

where、having之间的区别和用法

聚合函数是比较where、having 的关键。

开门见山。where、聚合函数、having

在from后面的执行顺序:

where>聚合函数(sum,min,max,avg,count)>having

列出group by来比较二者。()因where和having 在使用group by时问的最多)

若须引入聚合函数来对group by 结果进行过滤 则只能用having。(此处不多说,自己想 是先执行聚合函数还是先过滤

然后比对我上面列出的执行顺序 一看便知)

样例:select sum(score) from student where sex='man' group by name having sum(score)>210

1

注意事项 :

1、where 后不能跟聚合函数,因为where执行顺序大于聚合函数。

2、where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

3、having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having

条件显示特定的组,也可以使用多个分组标准进行分组。

版权声明:本文为博主原创,转载请注明出处(http://blog.csdn.net/jdjh1024).

https://blog.csdn.net/JDJH1024/article/details/76647866

mysql where 与having_正确理解MySQL中的where和having的区别相关推荐

  1. python的上下文管理用哪个关键字_正确理解python中的关键字“with”与上下文管理器...

    正确理解python中的关键字"with"与上下文管理器 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  正确理解python中的关键字&quo ...

  2. 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践

    学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 原文 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 感谢大家在上一篇 学一 ...

  3. mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制

    轻松理解MYSQL MVCC 实现机制 轻松理解MYSQL MVCC 实现机制 #### 1. MVCC简介 ##### 1.1 什么是MVCC MVCC是一种多版本并发控制机制. ##### 1.2 ...

  4. 正确理解WPF中的TemplatedParent

    原文:正确理解WPF中的TemplatedParent http://www.cnblogs.com/mgen/archive/2011/08/31/2160581.html (注:Logical T ...

  5. matlab计算正负零序分量,5分钟教你正确理解电力系统中的正序负序零序.doc

    5分钟教你正确理解电力系统中的正序负序零序 电力 三相不平衡 作图法 对称分量法 1:三相不平衡的的电压(或电流),可以分解为平衡的正序.负序和零序 2:零序为3相电压向量相加,除以3 3:正序将BC ...

  6. 正确理解scipy中的coo_matrix函数

    正确理解scipy中的coo_matrix函数 1. 构造一个空矩阵 2. 使用ijv(triplet)格式构造一个矩阵 3. 用重复的索引构造矩阵 1. 构造一个空矩阵 这种用法比较简单,直接生成一 ...

  7. MySQL笔记3:深入理解MySQL中的NULL

    深入理解MySQL中的NULL NULL:表示没有值,无法比较两个没有值的量.

  8. mysql核心技术分析_深入理解MySQL核心技术

    前言 第1章 MySQL的历史与架构 MySQL的历史 MySQL的架构 第2章 MySQL源代码基本要点 Unix Shell BitKeeper 准备系统:从BitKeeper树构建MySQL 从 ...

  9. 【MySQL进阶-06】深入理解mysql的内核查询成本计算

    MySql系列整体栏目 内容 链接地址 [一]深入理解mysql索引本质 https://blog.csdn.net/zhenghuishengq/article/details/121027025 ...

最新文章

  1. 运行维护:UPS电源并列运行分析及维护应用
  2. C#中代理的简单应用
  3. CodeForces - 1252E Songwriter(贪心)
  4. 新手教程:如何改变应用名称
  5. [矩阵乘法/快速幂专题]Arc of Dream,Recursive sequence,233 Matrix,Training little cats
  6. NHibernate自定义集合类型(上):基本实现方式
  7. js客户端存储之Web存储
  8. 拼出漂亮的表格 JS大牛巨作。
  9. python 中的面向对象
  10. Linux环境下使用NLPIR(ICTCLAS)中文分词详解
  11. 轨迹系列2——一种基于中值滤波的轨迹纠偏方法和几点思考
  12. 深入浅出了解OCR识别票据原理(Applying OCR Technology for Receipt Recognition)
  13. JavaBean的实用工具Lombok(省去get、set等方法)
  14. VMware Workstation下载和安装
  15. 《凤凰项目》读书笔记
  16. java-数字转换汉语中人民币的大写
  17. 全国三级流域空间分布矢量数据下载方式
  18. 北大计算机考研822 911区别,北大考研成绩“上热搜”,4位神仙“打架”,旁人:倒吸一口气!...
  19. 8款最佳的开源在线学习CMS系统
  20. 佐治亚理工计算机科学,佐治亚理工学院计算机科学专业如何?

热门文章

  1. Vuex的用法及组成部分
  2. 慢速ddos_如何以慢速快门手持拍摄相机
  3. python数据预处理实验_PimaIndiansdiabetes-数据预处理实验(一)
  4. 您认为不可能的10个SQL技巧
  5. 建筑中人行为模拟研究现状和展望(2015)
  6. 吉林大学软件学院C语言期末试题,2020年吉林大学软件工程硕士考研真题试卷及试题答案,数据结构与操作系统考研试题下载...
  7. 也看二代身份证的安全问题
  8. 计算机防雷属多少级别,广州塔遭遇雷击也不怕 防雷级别堪比军火库(图)
  9. gitk工具的使用方法
  10. 企业面试笔试题(待更新)