NOT EXISTS 是一个用于查询的关键字,它用于测试第二个查询是否为“空”。如果不存在结果,则第一次查询被提交。 因此,NOT EXISTS 用于在不必要地搜索大量数据时优化 SELECT 查询。
例如,以下查询将从 employees 表中检索所有工资小于 50000 的员工:
SELECT * FROM employees WHERE salary < 50000;
但是,如果您要查找该公司没有接收到任何奖金的员工,则可以使用 NOT EXISTS 来优化查询:
SELECT * FROM employees WHERE NOT EXISTS (SELECT * FROM bonuses WHERE bonuses.emp_id = employees.id);
在这个例子中,子查询(SELECT * FROM bonuses WHERE bonuses.emp_id = employees.id)将确定员工是否有奖金。 如果查询返回结果,则 NOT EXISTS 将返回 FALSE,并且该行将从结果集中排除。 否则,该行将包含在结果中。
需要注意的是,NOT EXISTS 子句比 IN 子句更有效,因为 NOT EXISTS 可以忽略大量的无关数据。