`

用LEFT JOIN 代替NOT IN 或 NOT EXISTS

 
阅读更多
用左连接,结果testb表里TempColum的值为NULL:

SQL> SELECT a.*,b.id "TempColum" FROM testa a LEFT JOIN testb b ON a.id=b.id;

        ID   VALUE       TempColum
---------- ----------       ----------
         2       b                   2
         4       d                   4
         6       f                    6
         5       e                   NULL
         3       c                   NULL
         1       a                   NULL

6 rows selected.

将NULL值过滤出来就是最后需要的结果:

SQL>

SELECT c.id,c.value FROM
(
 SELECT a.*,b.id "TempColum" FROM testa a LEFT JOIN testb b ON a.id=b.id
) c
WHERE c."TempColum" IS NULL
ORDER BY c.id

SQL>
        ID VALUE
---------- ----------
         1 a
         3 c
         5 e

分享到:
评论

相关推荐

    SQLServer 优化SQL语句 in 和not in的替代方案

    对于`IN`和`NOT IN`,应尽可能使用`JOIN`、`EXISTS`或结合空值判断的替代方法,以充分利用索引并减少不必要的计算步骤,从而提高查询速度和系统整体性能。在编写SQL时,不仅要考虑语句的可读性和简洁性,还要兼顾...

    sql server2005 exists使用方法

    在很多情况下,可以通过使用 `INNER JOIN` 或 `LEFT JOIN` 替换 `EXISTS` 来简化查询,同时保持相同的逻辑结果。这种方法不仅可以减少嵌套,还能提高查询性能。 ```sql SELECT database_items FROM database_...

    oracle性能优化技巧

    - `NOT IN`可能导致全表扫描,而`NOT EXISTS`则不会,因此在大多数情况下推荐使用`NOT EXISTS`。 13. **使用EXISTS代替子查询**: - 与普通的子查询相比,使用`EXISTS`可以减少查询的复杂度和提高性能。 14. **...

    简述Oracle中in和exists的不同

    - 对于大表,考虑使用`JOIN`操作代替`IN`或`EXISTS`,根据具体情况选择合适的连接类型(如INNER JOIN、LEFT JOIN等)。 - 使用`EXPLAIN PLAN`分析查询计划,了解数据库如何执行查询,以便进行优化。 - 在必要时,...

    Oracle SQL性能

    与使用EXISTS替代IN类似,使用NOT EXISTS代替NOT IN也可以提高查询效率。NOT EXISTS通常比NOT IN更高效,因为它只需要找到一个不存在的匹配项即可返回FALSE,而NOT IN则需要完全遍历整个列表。 #### 十一、用表连接...

    SQL语句优化技术分析

    3. **使用JOIN代替IN**:在某些情况下,使用INNER JOIN或LEFT JOIN可以更高效地完成相同的操作,尤其是当涉及到多个表时。 4. **避免使用NOT IN**:NOT IN可能导致全表扫描,尤其是在没有合适的索引支持的情况下。...

    Oracle数据库优化

    10. 选择正确的连接类型:在联接操作中,考虑使用INNER JOIN、LEFT JOIN、RIGHT JOIN或FULL OUTER JOIN,根据业务需求选择最高效的连接类型。 11. 避免在索引列上使用计算:如果在索引列上进行计算,Oracle无法直接...

    Oracle提高查询效率的方法

    使用 EXISTS、NOT EXISTS、IN、LEFT OUTER JOIN 等来代替 NOT 操作。 2. 注意 union 和 union all 的区别:union 比 union all 多做了一步 distinct 操作,能用 union all 的情况下尽量不用 union。 3. 查询时尽量...

    sql语句优化原则

    - **建议**: 使用更高效的查询方式,例如使用 `NOT EXISTS` 或 `LEFT JOIN` 结合 `IS NULL`。 - **示例**: 将 `SELECT * FROM servchargeinfo WHERE to_char(id) NOT IN (SELECT djbh FROM collectionrecords)` 改...

    SQL语句的优化及SQL 性能调整原则

    6. 对于更新和删除操作,使用`JOIN`代替`IN`或`EXISTS`,可以更高效地处理数据。 7. 使用合适的索引策略。创建覆盖索引(covering index)可以避免回表操作,提高查询速度。同时,定期分析和调整索引,确保它们仍然...

    sql优化(MSSQL版本)

    - **替代方案**: 使用LEFT JOIN或EXCEPT代替NOT IN和NOT EXISTS。 #### SQL书写注意事项 - **避免复杂查询**: 尽量减少嵌套查询的深度,避免过多的子查询。 - **合理使用索引**: 根据查询需求合理选择使用聚集...

    高手详解SQL性能优化十条经验

    8. **选择正确的JOIN类型**:选择最高效的JOIN类型,如INNER JOIN、LEFT JOIN或RIGHT JOIN,根据数据关系和查询需求进行优化。 9. **使用子查询优化**:子查询可能导致性能下降,可以考虑转化为连接操作或使用...

    oracle操作文档

    - **NOT IN**:强烈建议不使用 NOT IN,因为它无法利用索引,可以使用 EXISTS 或者 LEFT JOIN 来代替。 - 示例:使用 NOT EXISTS 替代:`SELECT * FROM T1 WHERE NOT EXISTS (SELECT 1 FROM T2 WHERE T1.ID = T2.ID...

    SQLServer优化

    - 避免使用NOT IN,可使用EXISTS、NOT EXISTS、IN、LEFT OUTER JOIN替代,其中EXISTS通常比IN更快。 - 使用IN时,将出现频率高的值放在列表前,以减少判断次数。 - BETWEEN在某些场景下比IN更快,特别是在基于...

    sql 学习

    推荐使用`EXISTS`代替IN,例如: ```sql -- Exists 用法 SELECT * FROM kj_dept WHERE EXISTS (SELECT * FROM kj_dept_info WHERE kj_dept.dept_id = kj_dept_info.dept_id AND dept_id=XXX) -- IN 用法 ...

    sql执行效率

    - **优先考虑内连接**:在处理多表查询时,如果条件允许,尽量使用内连接(INNER JOIN)而非外连接(LEFT JOIN 或 RIGHT JOIN)。内连接能更有效地过滤数据,减少不必要的数据传输。 #### 4. 合理选择关联表的方式 ...

    SQL查询优化

    在某些情况下,使用exists或not exists可能比in或not in更高效,因为它们只关心是否存在匹配的记录,而不关心具体值。 存储过程的优化主要涉及减少不必要的参数传递和减少嵌套层次。合理使用存储过程可以提高代码...

    Mysql查询优化从入门到入土详解含示例(值得珍藏)

    对于跨越多个表的查询,`LEFT JOIN`和`IS NULL`组合通常比`NOT IN`和子查询更高效。 最后,对于时间范围过大的查询,可以考虑分段查询,避免一次性扫描大量数据,通过程序控制分批次执行,减少单次查询的压力。 在...

    Oracle+SQL优化

    - **建议**:使用`LEFT JOIN`和`IS NULL`替代`NOT IN`或`NOT EXISTS`,以利用索引。 **2.6 IN和EXISTS** - **问题**:`IN`列表过大或`EXISTS`子查询性能差时,性能会下降。 - **建议**:使用`EXISTS`替代`IN`,并...

Global site tag (gtag.js) - Google Analytics