SQL - 不存在的地方
SQL - WHERE NOT EXISTS
我和员工有一个 table
身份证姓名工资
并且我通过以下 SQL 声明获得薪水最高的员工:
SELECT *
FROM Emplyees eOut
WHERE NOT EXISTS (SELECT *
FROM Emplyees eIn
WHERE eIn.Salary > eOut.Salary)
据我所知,只有当内部语句为真时,才会执行外部语句,那么为什么会给出结果?
我不明白为什么只有一个结果,这是如何处理的,为什么 NOT 和 > 对此很重要?
查询返回 Employees。但不是全部,如果有任何员工的薪水比这名员工高,它不会显示员工。为每个员工评估内部查询。换句话说,它是 returns 薪水最高的员工。如果两名员工的最高薪水相同,可能会增加 return 行。
表达式:
NOT EXISTS (SELECT * FROM Emplyees eIn WHERE eIn.Salary > eOut.Salary)
是一个布尔表达式,可能的值为 true
或 false
。
当内部查询 returns(至少)1 行时,它获得值 false
,如果内部查询 returns 没有行,它获得值 true
。
你的假设:
the outer statement will be executed only if the inner one is true
因为它的措辞是错误的。
声明:
SELECT * FROM Emplyees eOut
将被执行 return 所有 table Emplyees
的行,对于这些行中的每一行 WHERE
子句将其条件评估为 true
或 false
.
因此,对于 table 的每一行,条件 NOT EXISTS ...
将决定该行是否会出现在最终结果中。
要理解为什么 NOT 和 > 在这种情况下很重要,请考虑这样的查询:
Select every employee for whom does not exist another employee with
greater salary.
SELECT *
FROM Emplyees
ORDER BY Salaray DESC
LIMIT 1
试试这个查询
我和员工有一个 table 身份证姓名工资
并且我通过以下 SQL 声明获得薪水最高的员工:
SELECT *
FROM Emplyees eOut
WHERE NOT EXISTS (SELECT *
FROM Emplyees eIn
WHERE eIn.Salary > eOut.Salary)
据我所知,只有当内部语句为真时,才会执行外部语句,那么为什么会给出结果? 我不明白为什么只有一个结果,这是如何处理的,为什么 NOT 和 > 对此很重要?
查询返回 Employees。但不是全部,如果有任何员工的薪水比这名员工高,它不会显示员工。为每个员工评估内部查询。换句话说,它是 returns 薪水最高的员工。如果两名员工的最高薪水相同,可能会增加 return 行。
表达式:
NOT EXISTS (SELECT * FROM Emplyees eIn WHERE eIn.Salary > eOut.Salary)
是一个布尔表达式,可能的值为 true
或 false
。
当内部查询 returns(至少)1 行时,它获得值 false
,如果内部查询 returns 没有行,它获得值 true
。
你的假设:
the outer statement will be executed only if the inner one is true
因为它的措辞是错误的。
声明:
SELECT * FROM Emplyees eOut
将被执行 return 所有 table Emplyees
的行,对于这些行中的每一行 WHERE
子句将其条件评估为 true
或 false
.
因此,对于 table 的每一行,条件 NOT EXISTS ...
将决定该行是否会出现在最终结果中。
要理解为什么 NOT 和 > 在这种情况下很重要,请考虑这样的查询:
Select every employee for whom does not exist another employee with greater salary.
SELECT *
FROM Emplyees
ORDER BY Salaray DESC
LIMIT 1
试试这个查询