首页 > 数据库 >sql中,where和having的区别

sql中,where和having的区别

时间:2023-06-05 09:47:06浏览次数:42  
标签:... GROUP where having 分组 sql 筛选 WHERE HAVING

区别1:WHERE 可以直接使用表中的字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件;HAVING 必须要与 GROUP BY 配合使用,可以把分组计算的函数和分组字段作为筛选条件。
这决定了,在需要对数据进行分组统计的时候,HAVING 可以完成 WHERE 不能完成的任务。这是因为,在查询语法结构中,WHERE 在 GROUP BY 之前,所以无法对分组结果进行筛选。HAVING 在 GROUP BY 之后,可以使用分组字段和分组中的计算函数,对分组的结果集进行筛选,这个功能是 WHERE 无法完成的。另外,WHERE排除的记录不再包括在分组中。

区别2:如果需要通过连接从关联表中获取需要的数据,WHERE 是先筛选后连接,而 HAVING 是先连接后筛选。
这一点,就决定了在关联查询中,WHERE 比 HAVING 更高效。因为 WHERE 可以先筛选,用一个筛选后的较小数据集和关联表进行连接,这样占用的资源比较少,执行效率也比较高。HAVING 则需要先把结果集准备好,也就是用未被筛选的数据集进行关联,然后对这个大的数据集进行筛选,这样占用的资源就比较多,执行效率也较低。
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT...
FROM …,…-> ON -> (LEFT/RIGNT JOIN) -> WHERE -> GROUP BY -> HAVING-> SELECT -> DISTINCT -> ORDER BY -> LIMIT

标签:...,GROUP,where,having,分组,sql,筛选,WHERE,HAVING
From: https://www.cnblogs.com/jiangzishun/p/17457040.html

相关文章

  • mysql备忘录
    MySQL8下载安装腾讯云Ubuntu20.04服务器下载MySQL8并开启远程服务下载sudoaptupdate#更新Ubuntu存储库sudoaptinstallmysql-server#下载mysqlsudosystemctlstatusmysql#查看mysql状态配置启动找到mysqld文件路径find/-namemysql.server或find/-namemy......
  • GreatSQL 8.0.32-24 今日发布
    1.新增特性1.1SQL兼容性1.2MGR1.3性能优化1.4安全2.稳定性提升3.其他调整4.bug修复5.GreatSQLVSMySQL6.GreatSQLReleaseNotesGreatSQL8.0.32-24版本发布,增加并行loaddata、(逻辑&CLONE)备份加密、MGR读写节点可绑定动态VIP、Oracle兼容扩......
  • 完整支持Oracle PL/SQL,星环科技KunDB高兼容性实现低成本国产化替代
    从中兴、华为等一系列高新科技企业被美国制裁,到俄乌冲突事件爆发后,西方各国相继宣布制裁俄罗斯,以Oracle、IBM、微软、SAP为代表的科技巨头暂停在俄服务,这一系列动作给我们敲响了加速国产化替代的警钟。数据库作为提供数据存储与处理能力的基础软件,是信息系统的基础、信息安全的基石......
  • Mysql数据备份
    导出库/表导出库:mysqldump-h主机-u用户-p密码数据库>目标路径导出表:mysqldump-h主机-u用户-p密码数据库表1表2表3...>目标路径例如:mysqldump-hlocalhost-uroot-p123456schoolt_studentt_grade>D:/sql/1.sql导入表/库(建议)如果在登录情况下,......
  • 部署postgresql数据库
    当使用Docker部署PostgreSQL时,可以按照以下步骤进行操作:首先,确保已经安装了Docker并启动了Docker服务。打开终端或命令行界面,运行以下命令以拉取最新的PostgreSQLDocker镜像:dockerpullpostgres容器的启动命令将需要指定一些参数,如容器名称、端口映射、密码等。以下是一个示例命......
  • Elasticsearch与MySql实现数据同步
    选择方案基于RabbitMq的异步通知流程如下:管理端对mysql数据库数据完成增、删、改后,发送MQ消息服务端监听MQ,接收到消息后完成elasticsearch数据修改优点:低耦合,实现难度一般缺点:依赖mq的可靠性实现步骤在管理端和服务端都导入依赖坐标和配置application.yml文件点击......
  • 运用dbms_sqltune.report_sql_monitor生成sql语句监控信息
    文档课题:运用dbms_sqltune.report_sql_monitor生成sql语句监控信息.数据库:oracle11.2.0.11、理论知识通过给SQL语句加/*+MONITOR*/,强制收集monitor信息(正常情况下5秒以上的SQL语句会被自动收集)后,用BMS_SQLTUNE.report_sql_monitor可以得到执行计划等详细信息。2、实际测......
  • Mysql && Oracle case when用法
    CASEWHEN1.对值判断2.条件判断--方式一:对值判断SELECTCASE 指定字段 WHEN条件值1THEN 结果1 WHEN条件值2THEN 结果2 WHEN条件值3THEN 结果3 ELSE默认值 END字段别名FROM 表名SELECTCASE STATUS WHEN0THEN '等待' WHEN1THEN ......
  • 7. 特殊SQL的执行
    1.模糊查询‍演示代码:/***测试模糊查询*@parammohu*@return*/List<User>testMohu(@Param("mohu")Stringmohu);‍<!--List<User>testMohu(@Param("mohu")Stringmohu);--><selectid="testMohu"resultType="U......
  • Mysql如何新建一个用户并赋予视图权限
    Mysql如何新建一个用户并赋予视图权限 --新建用户CREATEUSER'viewUser'@'%'IDENTIFIEDBY'password'; -- 赋予视图权限GRANTSELECT,SHOWVIEWON`views`TO'viewUser'@'%' -- 并把视图内容关系到的表权限赋予新用户GRANTSELECTON`tableName`......