sql-where不存在

a9wyjsp7  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(673)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

9个月前关门了。
改进这个问题
我有一张表,上面有员工id名称和薪水
我用下面的sql语句得到薪水最高的员工:

SELECT *
FROM Emplyees eOut
WHERE NOT EXISTS (SELECT * 
                  FROM Emplyees eIn 
                  WHERE eIn.Salary > eOut.Salary)

据我所知,只有当内部语句为真时,外部语句才会被执行,那么为什么这会给出一个结果呢?我不明白为什么只有一个结果,这是如何处理的,为什么不和>是重要的?

hec6srdp

hec6srdp1#

表达式:

NOT EXISTS (SELECT * FROM Emplyees eIn WHERE eIn.Salary > eOut.Salary)

是具有可能值的布尔表达式 true 或者 false .
它得到了价值 false 当内部查询返回(至少)1行 true 如果内部查询不返回任何行。
您的假设:
只有当内部语句为true时,才会执行外部语句
它的措辞是错误的。
声明:

SELECT * FROM Emplyees eOut

将执行并返回表的所有行 Emplyees 对于每一行 WHERE 子句将评估其条件 true 或者 false .
所以对于表中的每一行 NOT EXISTS ... 将决定该行是否在最终结果中。
要理解为什么在这种情况下不和>很重要,请考虑以下查询:
选择每个不存在的员工以及另一个薪资更高的员工。

jpfvwuh4

jpfvwuh42#

查询重新查询员工。但并不是所有的,它并没有显示员工,如果有任何员工有更高的工资比这一个。为每个员工计算内部查询。换句话说,它会以最高的工资回报员工。如果两个员工的最高工资相同,则可能返回更多行。

qxsslcnc

qxsslcnc3#

SELECT *
    FROM Emplyees 
    ORDER BY Salaray DESC
    LIMIT 1

尝试此查询

相关问题