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

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。

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

    从1到10 的高级 SQL 技巧,试试知道多少?

    以下查询返回在where子句中指定的交易类型 (is_gift) 每天的总信用支出,并且还显示每天的总支出以及所有可用日期的总支出。...将表转换为 JSON 想象一下,您需要将表转换为 JSON 对象,其中每个记录都是嵌套数组的元素。...您始终可以将表视为 TYPE STRUCT 对象的数组,然后将其中每个对象传递给 UDF。这取决于你的逻辑。...您的数据集可能包含相同类型的连续重复事件,但理想情况下您希望将每个事件与下一个不同类型的事件链接起来。当您需要获取某些内容(即事件、购买等)的列表以构建渠道数据集时,这可能很有用。...希望这些来自数字营销的 SQL 用例对您有用。可以帮助您完成许多项目。 SQL 片段让我的工作变得轻松,几乎每天都在使用。此外,SQL 和现代数据仓库是数据科学的必备工具。

    8310

    CBO 查询变化(1):子查询展开机能(Subquery Unnesting)

    有时候用户写的 SQL,对于优化器来说并不一定是最好的,可能作出的执行计划不会用到合适的结合处理。 所以,CBO 会在作执行计划之前,用一堆十分难懂的机能去转换用户作的 SQL。...子查询展开机能(Subquery Unnesting) 通常情况下,SQL 的特点是用到了 IN,NOT IN, EXISTS, NOT EXISTS 子句。...> select t1.* from t1 where c2 in (select /*+ NO_UNNEST */ c2 from t2); C1 C2 -------...IN 子句里面的表直接同主查询的表进行了 SEMI 结合,SEMI 结合可以理解为满足 access(“C2”=“C2”) 条件的数据集。...有以下两种方法: 隐含参数 _UNNEST_SUBQUERY 设置成 false OR 最开始例子里面用到的 NO_UNNEST hint。

    25020

    【DB笔试面试570】在Oracle中,SQL优化在写法上有哪些常用的方法?

    操作(如果指定了非空,那么会选择ANTI的反连接),但是从Oracle 11g开始有新的ANTI NA(NULL AWARE)优化,可以对子查询进行UNNEST,NOT IN和NOT EXISTS都选择的是...SELECT需要检索的字段只包含索引列且WHERE查询中的索引列含有非空约束的时候,以上规则并不适用。...例如,SQL语句“SELECT CREATED FROM T1 WHERE TRUNC(CREATED)=TRUNC(SYSDATE);”,若CREATED列上有非空约束或在WHERE子句中加上“CREATED...避免使用HAVING子句,因为HAVING只会在检索出所有记录之后才对结果集进行过滤。这个处理需要排序、总计等操作。如果能通过WHERE子句限制记录的数目,那么就能提高SQL的性能。...(41)对于一些固定性的小的查询结果集或统计性的SQL语句(例如,SQL语句非常复杂,但是最终返回的结果集很简单,只包含少数的几行数据)可以使用结果集缓存(Result Cache)。

    3.6K30

    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语法的(长)列表中。...SQL查询| WHERE子句中的JSON对象 除了SELECT DISTINCT之外,您现在还可以通过两种方式在SQL WHERE子句中使用JSON对象: WHERE JSONor WHERE identifier...[SQL operator] JSON 一个快速说明:此功能可以更改当前支持的SQL语法。

    3.5K20

    Mybatis【13】-- Mybatis动态sql标签怎么使用?

    它还可以处理一种情况,当你不确定你的参数,不知道是不是为空的时候,我们不需要在业务逻辑中判断,直接在sql中处理,代码无比简洁。...where子句,这也就解决了我们上面所涉及到的问题。...剩下的就是标签的and子句,第一个片段里面可以不包含and,也可以包含,系统会自动去掉and,但是其他的片段里面的and,必须写上,否则会出错。...,不是百分之百会加,会根据需要自动加 suffix:在包含的内容后面加上后缀,不是百分之百会加,会根据需要自动加 prefixOverrides:可以把包含内容的首部某些内容忽略(不能自己增加),不一定会忽略...,根据需要自动忽略 suffixOverrides:也可以把包含内容的尾部的某些内容忽略(不能自己增加),同上 下面这样的是错误的,当传入的name不为空,而且age大于0的时候,会根据需要加上where

    6.2K30

    Mybatis【13】-- Mybatis动态Sql标签的使用

    ,当你不确定你的参数不知道是不是为空的时候,我们不需要在业务逻辑中判断,直接在sql中处理,代码无比简洁。...where>where>,, 使用where>where>标签,在有查询语句的时候,自动补上where子句,在没有查询条件的时候,不会加上where...子句,这也就解决了我们上面所涉及到的问题,剩下的就是标签的and子句,第一个,片段里面可以不包含and,也可以包含,系统会自动去掉and,但是其他的片段里面的and,必须写上,否则会出错...,不是百分之百会加,会根据需要自动加 suffix:在包含的内容后面加上后缀,不是百分之百会加,会根据需要自动加 prefixOverrides:可以把包含内容的首部某些内容忽略(不能自己增加),不一定会忽略...,根据需要自动忽略 suffixOverrides:也可以把包含内容的尾部的某些内容忽略(不能自己增加),同上 下面这样的是错误的,当传入的name不为空,而且age大于0的时候 <select

    1.2K30

    MADlib——基于SQL的数据挖掘解决方案(3)——数据类型之向量

    array_max() 返回数组中的最大值,忽略空值,返回数组元素的相同类型。...array_max_index() 返回数组中的最大值及其对应的下标,忽略空值,返回类型的格式为[max, index],其元素类型与输入类型相同。...array_min() 返回数组中的最小值,忽略空值,返回数组元素的相同类型。...array_sum() 返回数组中值的和,忽略空值,返回与输入相同的数据类型。 array_sum_big() 返回数组中值的和,忽略空值,返回FLOAT8类型。...array_abs() 返回由数组元素的绝对值组成的新数组,需要所有值非空。 array_mean() 返回数组的均值,忽略空值。 array_stddev() 返回数组的标准差,忽略空值。

    1.8K21

    谈一谈inexists , not innot exists

    但是如果屏蔽了某些隐含参数,还是会不一样,曾经在客户现场遇到一个case,使用exists的SQL,优化器没有自动做unnest,性能很差,加了unnest的hint后可以,改成in也可以不用加unnest...的hint就能自动做unnest。...not in的结果:因为子查询的结果集中有一条记录是null,则整个查询结果为空(这是否是你想要的结果?)...---------------- 1 a1 执行计划的join 步骤包含ANTI SNA 关键字,效率低 下面sql的结果集与上面一样,但是执行计划却不一样,下面的执行计划效率高: select...一般情况使用not exists比较保险,可以避免not in子查询返回包含null的记录时,整个结果集为空的情况(这种情况一般不是需要的结果),性能也有保障。

    59720

    SQL基础-->分组与分组函数

    |ALL]n) -- 求平均值,忽略空值 COUNT({*|[DISTINCT|ALL]expr}) -- 统计个数,其中expr用来判定非空值(使用*计算所有选定行,包括重复行和带有空值的行)...MAX([DISTINCT|ALL]expr) -- 求最大值,忽略空值 MIN([DISTINCT|ALL]expr) -- 求最小值,忽略空值 SUM([DISTINCT|ALL]n) --...带有expr参数的函数的数据类型可以为CHAR,VARCHAR2,NUMBER,DATE. 所有分组函数都忽略空值。...可以使用NVL 函数强制分组函数包含空值,如:*/ select avg(nvl(comm,0)) from emp; /* 五、GROUP BY 子句的语法: 使用GROUP BY 子句可以将表中的行分成更小的组...,如果未出现在分组函数中,则GROUP BY子句必须包含这些列 WHERE 子句可以某些行在分组之前排除在外 不能在GROUP BY 中使用列别名 默认情况下GROUP BY列表中的列按升序排列

    3.3K20

    MySQL(五)汇总和分组数据

    ,例子如下: select avg_(prod_price) as avg_price from products where vend_id = 1003; 这条SQL语句包含了where子语句,仅过滤出...①使用count(*)对表中行的数目进行计数,不管表列中包含的是空值(null)还是非空值; ②使用count(column)对特定列中具有值的行进行计数,忽略null值; select count(...) as cum_cust from customers; 这条SQL语句使用count(cust_email)对cust_email列中有值的行进行计数; PS:如果指定列名,则指定列的值为空的行被count...quantity列的值之和,where子句保证只统计某个指定列的数值; PS:利用标准的算数操作符,所有聚集函数都可用来执行多个列上的计算(sum()函数忽略列值为null的行) 6、distinct与聚集函数...by vend_id having count(*)>= 2; 这条SQL语句中,where子句过滤掉所有prod_price至少为10的行,然后按照vend_id分组数据;having子句过滤技术为

    4.7K20

    12C 新特性 | 标量子查询自动转换

    优化器是 Oracle 数据库最引人入胜的部件之一,因为它对每一个 SQL 语句的处理都必不可少。...优化器为每个 SQL 语句确定最有效的执行计划,这是基于给定的查询的结构,可用的关于底层对象的统计信息,以及所有与优化器和执行相关的特性。...1、12C 标量子查询自动转换说明 首先我们来看官方文档的说明: 标量子查询是出现在 SQL 语句的 SELECT 子句的子查询。...查询中同样加入了一个外连接,这是为了确保即使当视图的结果为空时,CUSTOMERS 的数据仍然会被返回。..._optimizer_unnest_scalar_sq 参数的控制; ⑥ 如果在 12C 中,标量子查询优化器自动转换导致了 SQL 语句遇到 bug,出错或者再出现性能问题,可以用 alter session

    97830

    SqlAlchemy 2.0 中文文档(三十六)

    Self 继承自 DMLWhereBase.where() 方法的 DMLWhereBase 返回一个新构造,其中给定的表达式已添加到其 WHERE 子句中,如果有的话,通过 AND 连接到现有子句。...继承自 DMLWhereBase 的 DMLWhereBase.where() 方法 返回一个新的结构,其中包含添加到其 WHERE 子句的给定表达式,并通过 AND 连接到现有子句(如果有)。...继承自 DMLWhereBase 的 DMLWhereBase.where() 方法 返回一个新的构造,其中给定的表达式被添加到其 WHERE 子句中,并通过 AND 连接到现有子句(如果有)。...Self 从 DMLWhereBase.where() 方法的 DMLWhereBase 继承 返回一个新的构造,其中包含要添加到其 WHERE 子句中的给定表达式,如果有的话,通过 AND 连接到现有子句...还提供了使用特殊的 .column 属性的列表达式,该属性可用于在列或 where 子句中引用函数的输出,例如 PostgreSQL 等后端的标量值。

    40510

    12C 新特性 | 标量子查询自动转换

    优化器是 Oracle 数据库最引人入胜的部件之一,因为它对每一个 SQL 语句的处理都必不可少。...优化器为每个 SQL 语句确定最有效的执行计划,这是基于给定的查询的结构,可用的关于底层对象的统计信息,以及所有与优化器和执行相关的特性。...1 12C 标量子查询自动转换说明 首先我们来看官方文档的说明: 标量子查询是出现在 SQL 语句的 SELECT 子句的子查询。...查询中同样加入了一个外连接,这是为了确保即使当视图的结果为空时,CUSTOMERS 的数据仍然会被返回。..._optimizer_unnest_scalar_sq 参数的控制; ⑥ 如果在 12C 中,标量子查询优化器自动转换导致了 SQL 语句遇到 bug,出错或者再出现性能问题,可以用 alter session

    1.5K70

    Oracle性能优化-子查询到特殊问题

    1、空值问题 首先值得关注的问题是,在NOT IN子查询中,如果子查询列有空值存在,则整个查询都不会有结果。这可能是跟主观逻辑上感觉不同,但数据库就是这样处理的。因此,在开发过程中,需要注意这一点。...SQL> select * from dual where 2 not in (select 1 from dual); D - X SQL> select * from dual where 2 not...11g有新的ANTI NA(NULL AWARE)优化,可以正常对子查询进行UNNEST。 ? 注意此时的关联字段OBJECT_ID,是可为空的。...优化的关键要看FILTER满足条件的次数。看下面的示例。 ? //上例中包含有OR条件的Semi Join,执行计划中使用了FILTER过滤,整个逻辑读消耗为69。 //下面通过改写,看看效果如何?...如果限制性强的条件在子查询,一般建议使用IN操作。如果限制性强的条件在主查询,则使用EXISTS操作。 2. NOT IN/EXISTS 在子查询中,NOT IN子句将执行一个内部的排序和合并。

    1.9K70

    重学 SQL(四)

    重学 SQL(四) 發佈於 2020-08-13 本篇,我们来介绍一下 SQL 中常用的聚合函数(Aggregate Functions)和 GROUP BY 子句的使用。...并且与之后要介绍的数据处理函数不同,SQL 的聚集函数在各种主要 SQL 实现中得到了相当一致的支持。...COUNT() 函数比较特殊,如果指定列名,则 COUNT() 函数会忽略指定列的值为空的行,但如果 COUNT() 函数中用的是通配符,则不忽略。...BY 子句可以包含任意数目的列,因而可以对分组进行嵌套,更细致地进行数据分组 如果在 GROUP BY 子句中嵌套了分组,数据将在最后指定的分组上进行汇总 GROUP BY 子句中列出的每一列都必须是检索列或有效的表达式...子句用于分组前筛选,HAVING 子句允许我们对分组之后的数据进行筛选,并且 HAVING 子句所使用的列必须是 SELECT 子句选择的列,或者聚合函数列,WHERE 子句中不能使用聚合函数。

    61910
    领券