Sql 操作员是如何工作的?我不知道为什么会有这样的结果

Sql 操作员是如何工作的?我不知道为什么会有这样的结果,sql,select,oracle-sqldeveloper,exists,Sql,Select,Oracle Sqldeveloper,Exists,我认为下面的SQL语句返回的列表工资低于5000。 但我的薪水超过或等于5000英镑。我真的不知道为什么。我错过什么了吗 select salary from employees where exists (select 1 from employees e where salary < 5000); 查询中exists运算符内的查询至少返回一行,因此运算符的计算结果为true。这里的问题是它与外部查询没有任何关联,因此它为外部查询中的每一行返回相同的结果,即始终为true 要获得所

我认为下面的SQL语句返回的列表工资低于5000。 但我的薪水超过或等于5000英镑。我真的不知道为什么。我错过什么了吗

select salary 
from employees 
where exists (select 1 from employees e where salary < 5000);
查询中exists运算符内的查询至少返回一行,因此运算符的计算结果为true。这里的问题是它与外部查询没有任何关联,因此它为外部查询中的每一行返回相同的结果,即始终为true

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


当您确实存在时,通常会有一个相关子查询。如果存在薪资<5000的用户,无论是谁,此查询都会返回行。
SELECT salary
FROM   employees e1
WHERE  EXISTS (SELECT 1
               FROM   employees e2 
               WHERE  e1.emp_id = e2.emp_id AND salary < 5000);