首页
学习
活动
专区
圈层
工具
发布

SQL 查询条件放到 JOIN 子句与 WHERE 子句的差别

我们再写 SQL 的时候,最常碰到一个问题就是,把查询条件放到 JOIN 子句和放到 WHERE 子句有什么不同呢?...'publish' ORDER BY sku.price DESC, wp_posts.post_date DESC LIMIT 0, 10 查询条件放到 WHERE 语句: SELECT SQL_CALC_FOUND_ROWS...但是语义上:JOIN - 描述两个表之间的关系,WHERE - 从结果集中删除行。这两种方法直接存在显著的语义上的差别,尽管两种方法对结果和性能都无影响,但是选择正确的语法将有助于代码更易于被阅读。...OUTER JOIN:如果使用的是 OUTER JOIN,可能会不同,比如上面的 SQL 改成 LEFT JOIN,并且连接条件失败,则查询条件放到 JOIN 子句仍将获得一行,但是如果放到 WHERE...子句,则它将被过滤掉,因为 NULL 不等于 1。

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

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

    图片WHERE、PREWHERE子句在ClickHouse中,WHERE和PREWHERE子句都用于筛选数据,但它们在查询中的使用有一些区别和注意事项。1....WHERE子句:WHERE子句在查询中是最后执行的,它作用于从表中读取的所有数据。WHERE子句可以包含任意条件,并且可以使用各种函数和操作符进行数据筛选。...WHERE和PREWHERE子句在ClickHouse的查询中都用于筛选数据,但WHERE子句是最后执行的,可包含复杂条件,能使用索引进行优化;而PREWHERE子句是在WHERE之前执行的,用于数据源的过滤...使用特定的列名选择指定的列。使用别名为列指定不同的名称。聚合函数:支持常见的聚合函数,如SUM、COUNT、AVG、MIN、MAX等。可以对选择的列进行聚合操作。...=、等)和逻辑运算符进行条件过滤。分组:支持使用GROUP BY子句对结果进行分组。可以指定一个或多个列进行分组。限制:支持使用LIMIT子句限制结果中的行数。可以指定要返回的最大行数。

    4.5K61

    HAVNG 子句 和 WHERE 的异同点?

    HAVING 子句和 WHERE 子句在 SQL 查询中都用于过滤数据,但它们的作用范围和使用场景有所不同。以下是它们的主要异同点:相同点过滤功能:两者都可以用于过滤查询结果。...使用场景:WHERE 子句:通常用于过滤单个行的数据,不涉及聚合函数。HAVING 子句:通常用于过滤聚合后的结果,可以包含聚合函数(如 COUNT, SUM, AVG 等)。...执行顺序:WHERE 子句:在 GROUP BY 之前执行。HAVING 子句:在 GROUP BY 之后执行。语法位置:WHERE 子句:在 FROM 子句之后,GROUP BY 子句之前。...使用 WHERE 子句SELECT customer_id, SUM(amount) AS total_amountFROM ordersWHERE amount > 100GROUP BY customer_id...;在这个查询中,WHERE 子句在聚合之前过滤掉 amount 小于 100 的行。

    98410

    《深度剖析SQL之WHERE子句:数据过滤的艺术》

    在当今数据驱动的时代,数据处理和分析能力已成为职场中至关重要的技能。SQL作为一种强大的结构化查询语言,在数据管理和分析领域占据着核心地位。...当我们使用SQL查询数据时,如果没有WHERE子句的指引,查询结果往往会是整个数据表的所有记录,就像在茫茫大海中漫无目的地航行,得到的是大量冗余信息,这对于实际的数据分析和应用来说,不仅效率低下,而且难以从中提取有价值的见解...二、WHERE子句的内在逻辑与应用原理WHERE子句的工作原理基于逻辑判断。它通过对数据表中的每一条记录进行条件评估,只有当记录满足我们设定的条件时,才会被包含在最终的查询结果中。...结合其他SQL特性:WHERE子句可以与SQL的其他特性如聚合函数、子查询、窗口函数等结合使用,实现更复杂的数据处理和分析任务。例如,通过子查询在WHERE子句中,可以实现基于其他查询结果的条件筛选。...因此,在设计WHERE子句时,应该综合考虑数据特点和查询需求,合理利用索引,而不是盲目地依赖它。WHERE子句作为SQL中数据过滤的核心工具,为我们在数据处理和分析的道路上提供了强大的支持。

    2K10

    SQL - on和where的区别

    on和where的区别 on和where后都表示查询条件,它们的区别如下: 1、on只能用于连接查询(内连接、外连接、交叉连接),在其他情况下使用on会报错,比如: 1 select* from test...on id = 1; -- 报错,不能在普通查询里使用on,需要使用where 2、连接查询会产生一张中间表(临时表),on是在生成中间表时使用的条件;而where是在中间表生成后对中间表进行过滤使用的条件...on test1.id = test2.id and test1.id = 1; select* from test1 left join test2 on test1.id = test2.id where....id = test2.id; -- 报错,没有使用on 4、在内连接和交叉连接中,单独使用on和where对结果集没有区别。...test1.id = test2.id; 附 以上语句都是在MySQL5.0的情况下测试的。

    2.6K20

    SQL语句中 where 和 on 的区别

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

    4.2K20

    图解sql中的where和on的区别

    经常会有读者有疑问,sql中关联条件是放where后面好,还是on后面好?今天就通过图形的方式给大家来解决这个问题。 之前两章我们通过图解SQL的执行顺序和JOIN的原理知道了这两步的执行过程。...和WHERE都是过滤筛选条件的,那么能不能将WHERE后面的条件 a.城市='广州' 放在 ON条件后面呢?...)的左右表完成筛选,最后得到虚表VT-A2,如下图 VT-A2 这样就没有添加外部行的动作了,不管其它过滤条件是放在ON后面还是WHERE 后面,都只是对VT-A2进行进一步的过滤,ON和WHERE的效果没有任何差别...在理解了LEFT JOIN,RIGHT JOIN和INNER JOIN的原理后,再来看WHERE和ON的区别就比较容易理解了。...结论 1、对于内连接(inner join),sql过滤条件放在where或者on后面没有区别 2、对于左右连接(left/right join),sql过滤条件放在where或者on后面有很大的区别。

    1.1K10

    【重学 MySQL】三十九、Having 的使用

    与 HAVING 的对比 在SQL中,WHERE和HAVING是两个用于过滤数据的关键字,它们虽然功能相似,但在使用场景和效果上存在显著差异。...WHERE子句在数据分组(如果有的话)之前进行过滤,基于表中的列数据来限制返回的数据行。...它基于分组后的聚合结果进行筛选,可以使用聚合函数(如SUM、AVG、COUNT等)和逻辑操作符。...执行顺序: 在SQL查询的执行顺序中,WHERE子句早于GROUP BY子句执行,而HAVING子句则在GROUP BY之后执行。...总结 WHERE和HAVING在SQL查询中各自扮演着重要的角色,它们的主要区别在于使用时机、支持的函数、字段别名的使用以及执行顺序。了解这些区别对于编写有效的SQL查询至关重要。

    1.7K11

    sql中的过滤条件放在on和where的区别

    最近遇到相关业务,想揪一下sql的中的left join 或者right join 或者inner join 中的 on和where的区别,想了解这个首先我们要了解两个基础的知识。...1.join的三种连接方式的区别: left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录...笛卡尔积:两个[集合]*X*和*Y*的笛卡尓积(Cartesian product),又称[直积],表示为*X* × *Y*,第一个对象是*X*的成员而第二个对象是*Y*的所有可能[有序对]的其中一个成员...| 6 | 8 | 111 | | 7 | 11 | 222 | | 8 | 13 | 12 | +----+------+--------+ 下面我们来执行sql...where 是没有区别的 下面我们来执行sql语句看看 left join select a.

    4.8K10

    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...功能和新的交互 我们还添加了功能和新增的图库,以便为新用户和当前用户提供更好的入职体验。在应用程序中检查它!

    4.5K20

    MySQL(五)汇总和分组数据

    ,包括返回文本列的最小值;但用于文本数据时,如果数据按相应的列排序,则min()返回最前面的行(min()函数忽略列值为null的行) 5、sum()函数 sum()函数用来返回指定列值的和(总计);例子如下...quantity列的值之和,where子句保证只统计某个指定列的数值; PS:利用标准的算数操作符,所有聚集函数都可用来执行多个列上的计算(sum()函数忽略列值为null的行) 6、distinct与聚集函数...)的那些分组; having和where的区别: where在数据分组前进行过滤,having在数据分组后进行过滤;where排除的行不包括在分组中(这可能会改变计算值,从而影响having子句中基于这些值过滤掉的分组...by vend_id having count(*)>= 2; 这条SQL语句中,where子句过滤掉所有prod_price至少为10的行,然后按照vend_id分组数据;having子句过滤技术为...2或2以上的分组; 3、分组和排序 group by和order by的区别: ?

    6.2K20

    SQL中JOIN时条件放在Where和On的区别

    背景 SQL中JOIN子句是用于把来自两个或多个表的数据连接起来,在这个过程中可能会添加一些过滤条件。昨天有小伙伴问,如下图的这两种SQL写法查询结果是否会一样?(好像这是某一年阿里的面试题) ?...案例 1、创建测试数据库和表并且插入用户测试的数据。...结果验证 将上面的两个表Inner Join和Left Join,过滤条件分别放在on和where中。...结论:Inner Join时过滤条件放在on和where中返回结果一致。...结论:Left Join时过滤条件放在on和where中返回结果不一致。 原因分析 可以这么理解,当两张表在Left Join时,会生成一张连接临时表,然后再将这张连接临时表返回给用户。

    4.6K10

    SQL 基础--> ROLLUP与CUBE运算符实现数据汇总

    ROLLUP与CUBE运算符都是对GROUP BY 子句的扩展 SQL Server中的用法 GROUP BY col1,col2 WITH ROLLUP | CUBE ; Oracle 中的用法...汇总层数为n+1,其中n为rollup中的列数 --因表emp存在deptno为空的记录,故以下所有演示中使用了where 子句过滤空值 SQL> SELECT deptno,job, SUM(sal...BY ,CUBE 或ROLLUP 中同时使用一列的处理 --即某些列同时在GROUP BY 子句和CUBE(ROLLUP)中存在 --结果中可以看出多出了一些重复的列 SQL> SELECT deptno...之间的一个整数 SQL> SELECT deptno,job,GROUP_ID(),SUM(sal) 2 FROM emp 3 WHERE deptno IS NOT NULL 4 GROUP...9400 30 0 9400 --使用HAVING子句和GROUP_ID函数过滤结果集 SQL> SELECT deptno,job,GROUP_ID(),SUM(sal) 2 FROM emp

    1.7K30
    领券