存在运算符如何工作?我不知道为什么结果会发生

How does exists operator work? I don't know why the result happens

我认为下面的SQL语句returns列出的工资低于5000。 但是拿到了大于等于5000的工资,真不知道为什么。我错过了什么吗?

select salary 
from employees 
where exists (select 1 from employees e where salary < 5000);

exists 运算符内的查询在您的查询 returns 中至少有一行,因此该运算符的计算结果为 true。这里的问题是它与外部查询没有任何关联,因此它 returns 外部查询中每一行的结果相同(即总是 true)。

要获得您想要的结果,您需要通过在内部查询的 where 子句中包含来自外部查询的术语来关联查询:

SELECT salary
FROM   employees e1
WHERE  EXISTS (SELECT 1
               FROM   employees e2 
               WHERE  e1.emp_id = e2.emp_id AND salary < 5000);

但是,老实说,这里并不需要 exists 运算符,直接查询薪水即可:

SELECT salary
FROM   employees
WHERE  salary < 5000