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

SQL语句中 where 和 on 的区别

最近面试时候碰到一道题,关于数据库左连接和内连接中and和where的区别,网上看了看资料,加深一下印象,大家也可以看看。...先说结论: 在使用left join左连接时,on and和on where条件的区别如下: 1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。...在使用inner join内连接时,不管是对左表还是右表进行筛选,on and和on where都会对生成的临时表进行过滤。...select * from person p inner join account a on p.id=a.id where p.id!=4 and a.id!=4; ?...where的过滤作用就出来了,右连接的原理是一样的。到这里就真相大白了:inner join中on和where没区别,右连接和左连接就不一样了。 本文转载自: SQL语句中where和 on的区别?

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

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

    深入分析后,问题的核心暴露出来:另一业务流程中对工单表执行更新(UPDATE)操作的SQL,其where子句中涉及的字段缺少必要的索引,导致其他业务在操作表中的数据时需要等待该更新完成。...问题描述 mysql 修改数据时,如果where条件后的字段未加索引或者未命中索引会导致锁表。这种锁表行为会阻塞其他事务对该表的访问,显著降低并发性能和系统响应速度。...查看正在等待锁资源的查询 select * from performance_schema.data_lock_waits; select * from sys.innodb_lock_waits;...查看锁定数据 select * from performance_schema.data_locks; 查看正在运行中的事务或命令的详情 select * from information_schema.innodb_trx...避免全表锁的关键在于优化查询,利用索引提高查询效率,减少系统性能的影响。通过合理地设计索引,并确保Update语句中的Where条件包含索引字段,可以有效地提升数据库的性能和并发能力。

    50210

    避免 SwiftUI 视图的重复计算

    通常我们会将这种多余的计算行为称之为过度计算或重复计算。本文将介绍如何减少( 甚至避免 )类似的情况发生,从而改善 SwiftUI 应用的整体表现。...只要多检查代码,清除掉这些没有使用的声明,就可以避免因此种方式产生重复计算。...为了避免产生重复计算,通过优化构造参数的设计,让实例仅在真正需要更新时才发生变化。 由于创建视图类型实例的操作异常地频繁,因此一定不要在视图类型的构造函数中进行任何会对系统造成负担的操作。...为了解决这个问题,我们应该调整传递给子视图的参数类型和内容,仅传递子视图需要的数据。...,可以考虑将闭包发送到后台队列 总结 本文介绍了一些在 SwiftUI 中如何避免造成视图重复计算的技巧,除了从中查找是否有能解决你当前问题的方法外,我更希望大家将关注点集中于这些技巧在背后对应的原理。

    9.3K81

    ClickHouse中,WHERE、PREWHERE子句和SELECT子句的使用

    图片WHERE、PREWHERE子句在ClickHouse中,WHERE和PREWHERE子句都用于筛选数据,但它们在查询中的使用有一些区别和注意事项。1....WHERE子句:WHERE子句在查询中是最后执行的,它作用于从表中读取的所有数据。WHERE子句可以包含任意条件,并且可以使用各种函数和操作符进行数据筛选。...SELECT子句在ClickHouse中,SELECT子句用于指定要检索的列或表达式,以及执行其他操作(如聚合、过滤、排序等)。SELECT子句支持以下功能和语法:选择列:使用*通配符选择所有列。...表达式:支持使用算术运算符(+、-、*、/等)和函数对列和常量进行计算。支持使用逻辑运算符(AND、OR、NOT等)进行条件判断。...限制:支持使用LIMIT子句限制结果中的行数。可以指定要返回的最大行数。子查询:支持使用子查询来嵌套或关联多个查询。

    1.8K61

    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添加到支持的...您现在可以编写这样的查询 ? ? 并将DISTINCT与JOIN,SELECT,GROUP BY,HAVING和ORDER BY语句相结合。...SQL查询| WHERE子句中的JSON对象 除了SELECT DISTINCT之外,您现在还可以通过两种方式在SQL WHERE子句中使用JSON对象: WHERE JSONor WHERE identifier...功能和新的交互 我们还添加了功能和新增的图库,以便为新用户和当前用户提供更好的入职体验。在应用程序中检查它!

    3.5K20

    MySQL子查询

    子查询的使用场景A. 在 WHERE 子句中使用子查询最常见的用途是通过子查询在 WHERE 子句中进行比较。...在 SELECT 子句中使用子查询子查询还可以用于 SELECT 子句中,作为计算的一部分。...子查询与联接(JOIN)比较在某些情况下,你可以使用联接(JOIN)来替代子查询。子查询可以执行与 JOIN 类似的操作,但有时 JOIN 性能会更高,因为它避免了重复的子查询执行。...优化子查询子查询可能会影响查询的性能,特别是在处理大型数据集时。为了优化查询,考虑以下几点:尽量避免在 SELECT 中使用不必要的子查询。...子查询有多种形式:单行子查询、多行子查询、多列子查询、和 相关子查询。子查询通常用于 WHERE、FROM、SELECT 子句中。性能优化:有时候使用 JOIN 可以替代子查询,通常能提高查询性能。

    7220

    SQL 性能优化 总结

    WHERE子句的末尾. (3)SELECT子句中避免使用 ‘ * ‘: ORACLE 在解析的过程中, 会将'*'依次转换成所有的列名,这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。...(6)使用DECODE函数来减少处理时间: 使用DECODE 函数可以避免重复扫描相同记录或重复连接相同的表。...(8)删除重复记录: 最高效的删除重复记录方法 (因为使用了ROWID) 例子:DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID...定期的重构索引是有必要的.: ALTER INDEX REBUILD (18) 用EXISTS替换DISTINCT: 当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在 SELECT子句中使用...WHERE子句使用的索引和ORDER BY 子句中所使用的索引不能并列.

    1.9K20

    Mysql慢sql优化

    表示在 select 或 where 列表中包含了子查询,MATERIALIZED:表示 where 后面 in 条件的子查询 UNION:表示 union 中的第二个或后面的 select 语句 UNION...索引使用规则 应尽量避免全表扫描,首先应考虑在 WHERE 及 ORDER BY 涉及的列上建立索引 应尽量避免在 WHERE 子句中使用 OR 来连接条件,建议可以使用UNION合并查询 多个OR的字句没有用到索引...应尽量避免在 WHERE 子句中对字段进行 NULL 值判断 应尽量避免在 WHERE 子句中使用!...如果在 WHERE 子句中使用参数,也会导致全表扫描 应尽量避免在 WHERE 子句中对字段进行表达式操作 应尽量避免在where子句中对字段进行函数操作 任何对列的操作都将导致表扫描,它包括数据库函数...将需要查询的结果预先计算好放在表中,查询的时候再Select。或者在service层处理。

    11210

    数据库优化方案之SQL脚本优化

    G:unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值 H:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值...另外,key_len只计算where条件用到的索引长度,而排序和分组就算用到了索引,也不会计算到key_len中。...SQL脚本优化常识: 1.’对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中使用!...3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值...如: select id from t where num/2=100 应改为: select id from t where num=100*2 9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描

    1.4K30

    Java SQL语句优化经验

    WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. (3) SELECT子句中避免使用 ‘ * ‘: ORACLE...'>数据库访问的检索数据量 ,建议值为200 (6) 使用DECODE函数来减少处理时间: 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. (7) 整合简单,无关联的get='_blank...由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里 (12) 减少对表的查询: 在含有子查询的SQL语句中,要特别注意减少对表的查询.例子: SELECT...定期的重构索引是有必要的.: ALTER INDEX REBUILD (18) 用EXISTS替换DISTINCT: 当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用...ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序. ORDER BY中所有的列必须定义为非空. WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列.

    2.6K100

    SQL优化法则小记

    采用自下而上的顺序解析where子句,根据这个原理,表之间的连接必须写 在其他where条件之前, 那些可以过滤掉最大数量记录的条件必须写在where子句的末尾. 3.select子句中避免使用 ‘...次数据库访问的检索数据量 ,建议值为200 6.使用 decode函数来减少处理时间: 使用 decode函数可以避免重复扫描相同记录或重复连接相同的表. 7.删除重复记录: 最高效的删除重复记录方法...(比如部门表和雇员表)的查询时,避免在select子句中 使用 distinct....当 oracle”遇到”not,他就会停止使用索引转而执行全表扫描. 22.避免在索引列上使用计算: where子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描....where 子句使用的索引和order by子句中所使用的索引不能并列.

    2.1K90

    Oracle SQL性能优化

    (3)      SELECT子句中避免使用 ‘ * ‘: ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间 (4)...和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 (6)      使用DECODE函数来减少处理时间: 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表...(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT....(22) 避免在索引列上使用计算. WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描....WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列.

    2.8K70

    高效sql性能优化极简教程

    解析(PARSE): 检查语法 检查语义和相关的权限 在共享池中查找sql语句 合并(MERGE)视图定义和子查询 确定执行计划 绑定(BIND) 在语句中查找绑定变量 赋值(或重新赋值) 执行(EXECUTE...5,用exists、not exists和in、not in相互替代 原则是哪个的子查询产生的结果集小,就选哪个 select * from t1 where x in (select y from...6,使用exists替代distinct 当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在select子句中使用distinct,一般可以考虑使用exists代替,exists使查询更为迅速...子句中对列的任何操作结果都是在sql运行时逐行计算得到,因此它不得不进行全表扫描,而没有使用上面的索引;如果这些结果在查询编译时就能得到,那么就可以被sql优化器优化,使用索引,避免全表扫描,因此sql...,使索引失效,如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引; select count(*) from stuff where id_no in('0','1') 可以拆开为:

    3.3K50

    SQL 性能调优

    阅读目录 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效) (2)WHERE子句中的连接顺序 (3)SELECT子句中避免使用 ‘ * ‘ (4)减少访问数据库的次数 (5)在SQL*Plus...如果检索数据量超过30%的表中记录数.使用索引将没有显著的效率提高 (33) 避免使用耗费资源的操作 (34) 优化GROUP BY (35)Select Count (*)和Select Count(...参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 回到顶部 (6)使用DECODE函数来减少处理时间 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表....(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT....回到顶部 (22) 避免在索引列上使用计算 WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描.

    3.2K10

    《SQL Cookbook》 - 第三章 多表查询

    如果习惯在FROM子句中,而不是WHERE子句中,写连接逻辑,则可以使用JOIN子句。 如果从可阅读性角度来说,表关联的时候,关联条件写在ON子句中,过滤条件写在WHERE子句中,会更让人理解。...为了避免NOT IN和NULL值带来的问题,可以结合使用NOT EXISTS和关联子查询。关联子查询指的是外层查询执行的结果集会被内层子查询引用。...EXISTS/NOT EXISTS和关联子查询一起使用时,SELECT中的列,不重要,之所以使用了NULL,是为了让注意力集中在子查询的连接操作上,而不是SELECT的列上。 5. ...组合适用连接查询和聚合函数 如果连接查询产生了重复行,通常有两种办法来使用聚合函数, (1) 调用聚合函数时,使用关键字DISTINCT,每个值都会先去掉重复项再参与计算。...e.empno = eb.empno(+) and e.deptno = 10 ) group by deptno; 如果计算编号为10的员工的工资总额,然后连接两表,这就避免了使用外连接

    2.4K50

    数据库性能优化之SQL语句优化

    WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. (3) SELECT子句中避免使用 ‘ * ‘: ORACLE...(12) 减少对表的查询: 在含有子查询的SQL语句中,要特别注意减少对表的查询.例子: SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = (...(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT....(22) 避免在索引列上使用计算 WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描.举例: 低效: SELECT … FROM DEPT WHERE SAL * 12...同样字符和整型数据的转换。 (31) 需要当心的WHERE子句: 某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子. 在下面的例子里, (1)‘!=’ 将不使用索引.

    5.7K20
    领券