列的别名只能在 ORDER BY 中使用,不能在 WHERE 中使用
举个栗子,有一个员工表employees
显示出表 employees
的 员工id,员工的月薪还有年薪,并按年薪进行升序排序。
SELECT employee_id, salary, salary * 12 annual_sal
FROM employees
ORDER BY annual_sal
但是列的别名不能在 WHERE 中使用
下面的MySQL语句会报错
SELECT employee_id, salary, salary * 12 annual_sal
FROM employees
WHERE annual_sal > 81600
为什么?进行解释
当 ORDER BY
和 WHERE
同时出现时,WHERE
要往前放,即 WHERE
放在 FROM
的后面,ORDER BY
放在 WHERE
的后面。
SELECT employee_id, salary
FROM employees
WHERE department_id IN (50, 60, 70)
ORDER BY depart_id DESC
MySQL中 SELECT 查询语句的执行顺序,以上面的语句进行分析,首先执行 FROM employees
从哪个表中取数据,然后执行 WHERE department_id IN (50, 60, 70)
看看有什么过滤条件,筛选完后留下一波数据,然后执行 SELECT employee_id, salary
看看你想查什么数据(哪些字段或者列)这时可以对列进行起别名,最后执行ORDER BY depart_id DESC
有了列的别名后才能使用列的别名进行对查询结果进行排序。
一句话总结:WHERE
在SELECT
前面执行,所以在SELECT
中定义的列的别名,无法在WHERE
使用。