我在理解NOT EXISTS
和子查询的组合如何工作时遇到问题。与NOT EXISTS和子查询混淆
据我所知,通过添加NOT EXISTS
,查询将返回子查询不会查询的所有行。我不明白的是当我们在以下情况下使用它时它是如何工作的。
+-------------+--------+
| id_employee | salary |
+-------------+--------+
| E001 | 1000 |
| E002 | 1001 |
| E003 | 999 |
| E004 | 1001 |
+-------------+--------+
,并尝试以下查询:
SELECT E.id_employee, E.salary
FROM Employees E
WHERE NOT EXISTS (
SELECT F.id_employee
FROM Employees F
WHERE F.salary > E.salary
);
将返回:
+-------------+--------+
| id_employee | salary |
+-------------+--------+
| E002 | 1001 |
| E004 | 1001 |
+-------------+--------+
好了,我真的不明白,了解F.salary > E.salary
比较是如何工作的,因为如果它比较逐行排列这两个表(它们是相同的),对我来说根本没有意义返回任何行。
你能否告诉我这是如何工作的?