关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。
9个月前关门了。
改进这个问题
我有一张表,上面有员工id名称和薪水
我用下面的sql语句得到薪水最高的员工:
SELECT *
FROM Emplyees eOut
WHERE NOT EXISTS (SELECT *
FROM Emplyees eIn
WHERE eIn.Salary > eOut.Salary)
据我所知,只有当内部语句为真时,外部语句才会被执行,那么为什么这会给出一个结果呢?我不明白为什么只有一个结果,这是如何处理的,为什么不和>是重要的?
3条答案
按热度按时间hec6srdp1#
表达式:
是具有可能值的布尔表达式
true
或者false
.它得到了价值
false
当内部查询返回(至少)1行true
如果内部查询不返回任何行。您的假设:
只有当内部语句为true时,才会执行外部语句
它的措辞是错误的。
声明:
将执行并返回表的所有行
Emplyees
对于每一行WHERE
子句将评估其条件true
或者false
.所以对于表中的每一行
NOT EXISTS ...
将决定该行是否在最终结果中。要理解为什么在这种情况下不和>很重要,请考虑以下查询:
选择每个不存在的员工以及另一个薪资更高的员工。
jpfvwuh42#
查询重新查询员工。但并不是所有的,它并没有显示员工,如果有任何员工有更高的工资比这一个。为每个员工计算内部查询。换句话说,它会以最高的工资回报员工。如果两个员工的最高工资相同,则可能返回更多行。
qxsslcnc3#
尝试此查询