首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL语句中 where 和 on 的区别

先说结论: 在使用left join左连接时,on and和on where条件的区别如下: 1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。...2、where条件是在临时表生成好后,再对临时表进行过滤的条件。...这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉,on后的条件用来生成左右表关联的临时表,where后的条件对临时表中的记录进行过滤。...join过程可以这样理解:首先两个表做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步的临时表再进行过滤。...where的过滤作用就出来了,右连接的原理是一样的。到这里就真相大白了:inner join中on和where没区别,右连接和左连接就不一样了。 本文转载自: SQL语句中where和 on的区别?

3.2K20

sql语句中where与having的区别

Where 是一个约束声明,使用Where约束来自数据库的数据,Where是在结果返回之前起作用的,Where中不能使用聚合函数。...Having是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。...一来,我们要使用聚合语句 avg ;二来,我们要对聚合后的结果进行筛选( average > 3000 ),因此使用 where 会被告知 sql 有误。...例2:要查询每个部门工资大于3000的员工个数 sql语句应为: select deparment, count(*) as c from salary_info where salary >...3000 group by deparment 此处的 where 不可用 having 进行替换,因为是直接对库中的数据进行筛选,而非对结果集进行筛选。

1.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL语句中where 1=1的意义

    我们在看别人项目的时候,很多时候看到这样的SQL语句: select * from user where 1=1 其中这个where1=1是有特殊意义的,包含以下两种情境:动态SQL拼接和查询表结构。...当我们的SQL语句加上where 1=1的时候,就不报错了,如下: String sql="select * from table_name where 1=1"; if( conditon 1) {...sql=sql+" and var2=value2"; } if(conditon 2) { sql=sql+" and var3=value3"; } SQL语句加上where 1=1,只是为了满足多条件查询页面中不确定的各种因素而采用的一种构造一条正确能运行的动态...这种写法实际目的是为了获取逻辑值"True",其实诸如2=2, 1+2=3,'中'='中'等之类的写法都可以返回逻辑值"True",只不过1=1的运算开销更小,故被应用的最普遍。...,有些画蛇添足,where 1=1的实际意义不如where 11(或者where 1=0)来得有用,当我们只需要获取表的字段(结构)信息,而不需要理会实际保存的记录时,例2)的写法将是非常可去取的,

    3.7K51

    避免锁表:为Update语句中的Where条件添加索引字段

    深入分析后,问题的核心暴露出来:另一业务流程中对工单表执行更新(UPDATE)操作的SQL,其where子句中涉及的字段缺少必要的索引,导致其他业务在操作表中的数据时需要等待该更新完成。...问题描述 mysql 修改数据时,如果where条件后的字段未加索引或者未命中索引会导致锁表。这种锁表行为会阻塞其他事务对该表的访问,显著降低并发性能和系统响应速度。...,当我们的索引失效时,也会锁表 命令行查看(mysql版本8.0) 查看被锁定的表 show OPEN TABLES where In_use > 0; 此命令用于列出当前正在使用中的表,也就是说那些被锁定或正在进行某些操作...; 总结 在编写Update语句时,务必注意Where条件中涉及的字段是否有索引支持。...避免全表锁的关键在于优化查询,利用索引提高查询效率,减少系统性能的影响。通过合理地设计索引,并确保Update语句中的Where条件包含索引字段,可以有效地提升数据库的性能和并发能力。

    50210

    MySQL查询语句中的IN 和Exists 对比分析

    tabA.x in (select x from tabB where y>0 ); 其执行计划: (1)执行tabB表的子查询,得到结果集B,可以使用到tabB表的索引y; (2)执行tabA表的查询...原因分析 对t_poetry表的子查询结果集很小,且两者在t_poetry表都能使用索引,对t_poetry子查询的消耗基本一致。...这种情况下子查询结果集很大,我们看看MySQL的查询计划: 使用in时,由于子查询结果集很大,对t_author和t_poetry表都接近于全表扫描,此时对t_author表的遍历耗时差异对整体效率影响可以忽略...,执行计划里多了一行,在接近全表扫描的情况下,mysql优化器选择了auto_key来遍历t_author表: 使用exists时,数据量的变化没有带来执行计划的改变,但由于子查询结果集很大...,5.5以后的MySQL版本在exists匹配查询结果时使用的是Block Nested-Loop(Block嵌套循环,引入join buffer,类似于缓存功能)开始对查询效率产生显著影响,尤其针对<

    1.1K10

    mysql的where条件后加case_recommend

    大家好,又见面了,我是你们的朋友全栈君。 背景:数据库用的Oracle; 报表用的是【FineReport】,之前没用过,被临时授命解决问题,所以大概了解了一下。...里面应该是集成了excel插件,报表样式如下: 今天在项目中遇到一个这样的场景: A为汇总页面,显示的是按医院分组统计出来的一些数据,效果如下图 图中每一列都能下钻到另一个页面,医院名称和起始时间都作为参数传送...前期因为某一些需求,有一家医院出现了两个不同的名称,所以将其中一个名称的数据统计到了另一个名称下。而【检查数】这一列下钻后的数据,恰恰是被合并的名称下的数据,所以下钻后就查不到数据了。...但我觉得这样的客户体验不好,所以想到了能不能在where中增加case when。所以在网上查了一下,果然是可行的。...所以就将下钻后的查询条件修改成了下图这样: 之前的条件为:study.HospitalName=’${xxxx}’。 这里记录一下,为以后需要的同行铺一下路。

    1.8K30

    MySQL存储过程where条件执行失败的问题

    跟踪了半小时,发现是数据库的数据出错了,玩家下线保存角色数据的时候,居然将数据库内所有角色的数据都改了,然后赶紧去看存储过程,但是看不出存储过程的错误。...0,新建的宠物始终存不到数据库,当时也是调了很久,还以为是mysql的BUG,后来我改用replace into 语句解决了这个问题,以为是偶发,也没深究这个情况。...,后来突然想到一个问题,是不是参数命名问题,改了一些参数命名,某一次突然正确了,经过比较发现,原来where后面作为条件的变量名不能和字段名相同,而且这里是不区分大小写的。...但是作为update和insert into的参数确是可以的,mysql真的很坑爹呀。...最后回到最开始的问题,where后面是 RoleID = roleID; 所以执行失败了,只需要把参数roleID改下名,不和字段名RoleID同名即可。

    2.3K20

    MySQL中的WHERE和HAVING的用法解析

    在数据库查询中,WHERE和HAVING是两个非常重要的子句,它们都用于过滤结果集,但它们的使用场景和功能有所不同。WHERE子句WHERE子句用于在查询过程中过滤行,即在数据被检索出来之前应用条件。...WHERE与HAVING的区别WHERE和HAVING的主要区别在于它们可以操作的数据类型。WHERE用于过滤行,而HAVING用于过滤聚合后的结果。...性能考虑在某些情况下,WHERE和HAVING可以互换使用,但它们的性能可能会有所不同。通常,WHERE子句在过滤行时更高效,因为它可以在数据被聚合之前就排除不需要的行,从而减少处理的数据量。...department, salary) IN ( SELECT department, MAX(salary) FROM employees GROUP BY department);这个查询使用了子查询和...总结WHERE和HAVING是SQL查询中非常重要的两个子句,它们各自有不同的用途和适用场景。WHERE用于在数据聚合之前过滤行,而HAVING用于在数据聚合之后过滤结果。

    8900

    Studio 3T中的新功能:支持SQL SELECT DISTINCT,WHERE子句中的JSON对象及更多

    Studio 3T的2019年第一个版本侧重于对SQL Query的改进,这是您最常用的功能之一,此外还有其他用户请求的UX优化: 添加了SELECT DISTINCT支持 使用JSON对象的WHERE...子句中的扩展SQL语法 能够在更改字段类型时保留值 更好的入门功能建立在功能和新的交互之上 SQL查询|支持SQL SELECT DISTINCT 我们已将SQL SELECT DISTINCT添加到支持的...SQL查询| WHERE子句中的JSON对象 除了SELECT DISTINCT之外,您现在还可以通过两种方式在SQL WHERE子句中使用JSON对象: WHERE JSONor WHERE identifier...在此处查看支持的JSON语法的完整列表。...功能和新的交互 我们还添加了功能和新增的图库,以便为新用户和当前用户提供更好的入职体验。在应用程序中检查它!

    3.5K20

    MYSQL 使用的三个阶段,where are you

    估计这个标题不少人会进来看看什么阶段,where am I. 这里并不是要讲技术,所以想获得“秘籍”的同学可以绕道了,这里讨论的是一个更大的方向....MYSQL 在各大传统企业用的越来越多,问题也是越来越多,在传统企业使用MYSQL会经历三个过程. 1 初期,兴奋期, OMG 我们单位用了MYSQL 可算和互联网接近了, 我们整体的IT的架构也变得更亮眼了..., 有没有一种 fasion的感觉. 2 疑问期,随着MYSQL的使用的数量越来也多,问题也是凸显,例如数据分析用ORACLE的方法在MYSQL里面就不灵光了, 业务分析的人员估计是第一个抱怨的,...MYSQL 数据库的使用会带出一个生态,一个完成整体数据流转的生态....当你的企业大面积部署了 MYSQL ,那么很高兴,你已经从第一个兴高采烈的阶段, 到达了第二个阶段, 几家欢喜几家愁.

    50220

    MySQL数据库,SQL的where条件提取

    在理解以上的问题解答的基础上,做⼀个抽象,可总结出⼀套放置于所有SQL语句⽽皆准的where查询条件的提取规则: 所有SQL的where条件,均可归纳为3⼤类 • Index Key (First Key...2.Index Filter 在完成Index Key的提取之后,我们根据where条件固定了索引的查询范围,但是此范围中的项,并不都是满⾜查询条件的项。...Index Filter的提取规则:同样从索引列的第⼀列开始,检查其在where条件中是否存在: 若存在并且where条件仅为 =,则跳过第⼀列继续检查索引下⼀列,下⼀索引列采取与索引第⼀列同样的提取规则...;若where条件为 >=、>、的⼏种,则跳过索引第⼀列,将其余where条件中索引相关列全部加⼊到Index Filter之中;若索引第⼀列的where条件包含 =、>=、>、<、<=...Index Key/Index Filter/Table Filter⼩结 SQL语句中的where条件,使⽤以上的提取规则,最终都会被提取到Index Key (First Key & Last Key

    2.3K10

    MySQL的 where 1=1会不会影响性能?

    在日常业务开发中,会通过使用where 1=1来简化动态 SQL语句的拼接,有人说where 1=1会影响性能,也有人说不会,到底会不会影响性能?本文将从 MySQL的官方资料来进行分析。...那么,有没有 MySQL的官方资料可以佐证 where 1=1确实被优化了?答案:有!MySQL有一种 Constant-Folding Optimization(常量折叠优化)的功能。...查阅了 MySQL的官方资料,Constant-Folding Optimization 从 MySQL5.7版本开始引入,至于 MySQL5.7以前的版本是否具备这个功能,还有待考证。如何选择?...如果 MySQL Server版本大于等于 5.7,两个随便选,或者根据团队的要求来选;如果 MySQL Server版本小于 5.7,假如使用的是 MyBatis,建议使用where> 标签,如果使用的还是比较老的...本文通过 MySQL的官方资料,加上百万数据的表进行真实测试,得出下面的结论:如果 MySQL Server版本大于等于 5.7,两个随便选,或者根据团队的要求来选;如果 MySQL Server版本小于

    15410
    领券