SQL查询的意外结果

时间:2017-06-22 12:19:57

标签: sql

任何人都可以解释为什么这个查询:

SELECT employee_id, last_name, salary 
FROM   employees
WHERE  department_id IN (SELECT department_id
                     FROM   employees
                     WHERE  last_name LIKE '%u%'
                     )
AND  salary > (SELECT AVG(salary)  
           FROM employees);

返回的行数少于这个嵌套的行:

SELECT employee_id, last_name, salary 
FROM   employees
WHERE  department_id IN (SELECT department_id
                     FROM   employees
                     WHERE  last_name LIKE '%u%'
                     AND  salary > (SELECT AVG(salary)  
                                    FROM employees);
                     )

1 个答案:

答案 0 :(得分:2)

第一个返回满足以下条件的所有员工:

  • 员工在某个部门有一名“你”员工。
  • 员工的工资大于平均水平。

第二个回报符合这些条件的所有员工:

  • 该员工所在的部门中有一名“u”员工,其工资大于平均水平。

这两个条件非常不同。我不希望它们返回相同的结果集。

此外,每当您在查询中有多个表时,您应该使用表别名的缩写的表别名,您应该限定所有列名。