为什么这些SQL语句中只有一个有效?

use*_*187 0 sql oracle select

为什么第一个SQL语句不执行,第二个SQL语句不执行?

1.

select e.employee_id, e.last_name, e.salary as "SALARY"
from employees e
where employees.salary > (select avg(salary) from employees) 
order by SALARY;
Run Code Online (Sandbox Code Playgroud)

2.

select e.employee_id, e.last_name, e.salary as "SALARY"
from employees e
where e.salary > (select avg(salary) from employees) 
order by SALARY;
Run Code Online (Sandbox Code Playgroud)

Joh*_*Woo 5

因为您已经为表名定义了别名employee.

因此在WHERE子句中,您需要使用别名,而不是表名,因为它不再有效.

SELECT e.employee_id, e.last_name, e.salary as "SALARY" 
FROM   employees e 
WHERE  e.salary > (select avg(salary) from employees) 
    -- ^ ALIAS should be used, not the tableName
ORDER  BY SALARY;
Run Code Online (Sandbox Code Playgroud)

这可能有点偏离主题,但这是一个额外的信息.

SQL操作顺序如下:

  • FROM子句
  • WHERE子句
  • GROUP BY子句
  • HAVING子句
  • SELECT子句
  • ORDER BY子句

由于您已在FROM子句上为表名提供了别名,因此操作顺序中的以下内容现在指的是给定的别名,而不是表名本身.