【问题标题】:SQL - WHERE NOT EXISTS [closed]SQL - 不存在的地方[关闭]
【发布时间】:2020-11-28 19:31:29
【问题描述】:
我有一张员工桌
身份证姓名工资
我用这条 SQL 语句得到了薪水最高的员工:
SELECT *
FROM Emplyees eOut
WHERE NOT EXISTS (SELECT *
FROM Emplyees eIn
WHERE eIn.Salary > eOut.Salary)
据我所知,只有当内部语句为真时,外部语句才会执行,那么为什么会给出结果呢?
我不明白为什么只有一个结果,这是如何处理的,为什么 NOT 和 > 对此很重要?
【问题讨论】:
标签:
sql
subquery
where-clause
exists
【解决方案1】:
查询返回员工。但不是全部,如果有任何员工的薪水高于此人,它不会显示员工。为每个员工评估内部查询。换句话说,它返回薪水最高的员工。如果两个员工的最高薪水相同,它可能会返回更多行。
【解决方案2】:
表达式:
NOT EXISTS (SELECT * FROM Emplyees eIn WHERE eIn.Salary > eOut.Salary)
是一个布尔表达式,可能值为true 或false。
当内部查询返回(至少)1 行时,它获取值 false,如果内部查询没有返回任何行,则获取值 true。
你的假设:
只有当内部语句为真时,才会执行外部语句
因为它的措辞是错误的。
声明:
SELECT * FROM Emplyees eOut
将被执行并返回所有表Emplyees的行,对于这些行中的每一行,WHERE子句将评估其条件为true或false。
因此,对于表格的每一行,条件 NOT EXISTS ... 将决定该行是否会出现在最终结果中。
要理解为什么 NOT 和 > 在这种情况下很重要,请考虑如下查询:
选择不存在其他员工的每位员工
更高的薪水。
【解决方案3】:
SELECT *
FROM Emplyees
ORDER BY Salaray DESC
LIMIT 1
试试这个查询