Sql 比较表的相同值

Sql 比较表的相同值,sql,Sql,有人能给我解释一下下面的代码吗 select e1.Name as 'Employee', e1.Salary from Employee e1 where 3 > ( select count(distinct e2.Salary) from Employee e2 where e2.Salary > e1.Salary ) ; 尤其是线路 where e2.Salary > e1.Salary 比较相同表格(e1、e2,尽管别名相同但不同)中

有人能给我解释一下下面的代码吗

select e1.Name as 'Employee', e1.Salary
from Employee e1
where 3 >
(
    select count(distinct e2.Salary)
    from Employee e2
    where e2.Salary > e1.Salary
)
;
尤其是线路

  where e2.Salary > e1.Salary
比较相同表格(e1、e2,尽管别名相同但不同)中的相同值(即工资)意味着什么?我们为什么这样做? 如果有人对此有很好的参考资料,请在这里发布。

这称为相关子查询。您将从以下查询开始:

select e1.Name as Employee, e1.Salary
from Employee e1;
此查询返回
Employee
中的所有行。您可以将数据库引擎视为在每一行中循环,在本查询中,它实际上被称为
e1

然后,对于每一行,它在概念上运行子查询:

(select count(distinct e2.Salary)
 from Employee e2
 where e2.Salary > e1.Salary
-------^ correlation clause
)
在这个子查询中,它再次遍历表。对于表中的每一行,它会比较工资。然后执行
计数(不同)
和其他比较,以查看
e1
行是否应保留在结果集中或被过滤掉


注意:这些都是概念性的。相关子查询并不要求实际有两个正在运行的循环。查询只描述结果集。优化器选择生成正确结果的最佳方法。

请不要标记多个RDBMS,只标记您实际使用的RDBMS。请注意,不要将文字字符串用作别名;仅在该语法中允许使用单引号(
)来分隔标识对象。使用它作为别名可能会令人困惑,因为其他语法,如
其中'My Column'=1
按'My Column'排序
的操作方式不同,在这两种情况下,
'My Column'
将被视为文字字符串;不是名为/别名为
'My column'
的列。这可能会导致意外或不受欢迎的行为。你能为此类问题或任何其他阅读材料提供任何链接吗?比较同一个表并从中得到解决方案是一个小技巧。@user2755407。写了一本关于使用SQL进行数据分析的书(第二版),我对我的书很有偏见。哈哈..谢谢..很高兴认识你Gordon Linoff先生:)