SELECT sal
FROM emp e
WHERE 5 >= (SELECT COUNT(sal)
FROM emp a
WHERE a.sal <= e.sal)
ORDER BY sal;
我知道我们将获得至少五名收入者。但是查询究竟是如何执行的呢?我无法理解。请帮帮我
答案 0 :(得分:1)
此查询具有称为相关子查询的内容。您可以将查询视为运行两个嵌套循环,迭代emp
中所有可能的行对。这是它的核心:
WHERE a.sal <= e.sal
e
指定外部 SELECT
(FROM emp e
)中的行,而a
指定嵌套<中的行/ em> SELECT
(FROM emp a
)。该条件使嵌套查询计算所有emp
行的工资小于外部查询的工资。外部查询包括工资较低的工资小于或等于五的工资。
请注意,具有相同工资的行将被计数多次,可能会减少返回集中的行数。例如,如果有六个底薪者具有相同的薪水,则查询将返回一组空行。您可以使用DISTINCT
更改此行为。
答案 1 :(得分:0)
它始终有助于查看执行计划以查看查询将如何执行,请浏览图像以了解查询将如何运行
您可以通过以下链接查找有关sql查询执行计划的更多信息