任何人都可以解释这个SQL查询中发生的事情吗?

时间:2017-03-16 06:23:48

标签: sql oracle

SELECT sal 
FROM emp e 
WHERE 5 >= (SELECT COUNT(sal) 
            FROM emp a 
            WHERE a.sal <= e.sal)
ORDER BY sal;

我知道我们将获得至少五名收入者。但是查询究竟是如何执行的呢?我无法理解。请帮帮我

2 个答案:

答案 0 :(得分:1)

此查询具有称为相关子查询的内容。您可以将查询视为运行两个嵌套循环,迭代emp中所有可能的行对。这是它的核心:

WHERE a.sal <= e.sal

e指定外部 SELECTFROM emp e)中的行,而a指定嵌套<中的行/ em> SELECTFROM emp a)。该条件使嵌套查询计算所有emp行的工资小于外部查询的工资。外部查询包括工资较低的工资小于或等于五的工资。

请注意,具有相同工资的行将被计​​数多次,可能会减少返回集中的行数。例如,如果有六个底薪者具有相同的薪水,则查询将返回一组空行。您可以使用DISTINCT更改此行为。

答案 1 :(得分:0)

它始终有助于查看执行计划以查看查询将如何执行,请浏览图像以了解查询将如何运行

enter image description here

您可以通过以下链接查找有关sql查询执行计划的更多信息

https://www.mssqltips.com/sqlservertip/1856/sql-server-query-execution-plans-in-sql-server-management-studio/