我应该使用 notists 或 join 语句来过滤 NULL 吗?

2023-12-29

SELECT  *
FROM    employees e
WHERE   NOT EXISTS
        (
        SELECT  name 
        FROM    eotm_dyn d
        WHERE   d.employeeID = e.id
        )

And

SELECT * FROM employees a LEFT JOIN eotm_dyn b on (a.joinfield=b.joinfield) WHERE b.name IS NULL

哪个效率更高,分析一下?


假设涉及的列值不能为 NULL -

MySQL:

LEFT JOIN/IS NULL is 更高效 than NOT EXISTS - read 这篇文章的详细信息 http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/.

Oracle:

它们是等价的 http://explainextended.com/2009/09/17/not-in-vs-not-exists-vs-left-join-is-null-oracle/.

SQL服务器:

NOT EXISTS is 更高效 than LEFT JOIN/IS NULL - 阅读这篇文章了解详细信息 http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server/.

Postgres:

像甲骨文一样,他们是等价的 http://explainextended.com/2009/09/16/not-in-vs-not-exists-vs-left-join-is-null-postgresql/.

如果您对列值不能为空这一细节有疑问,请使用 LEFT JOIN / IS NULL - 记住 LEFT JOIN 的含义。这个链接 http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html可能有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该使用 notists 或 join 语句来过滤 NULL 吗? 的相关文章

随机推荐