Mysql 中,為什麼 WHERE 使用別名會報錯,而 ORDER BY 不會報錯? 我們先對salary * 12 命名一個別名annual_sal SELECT employee_id,salary,salary * 12 annual_sal FROM employees ORDER BY a ...
Mysql 中,為什麼 WHERE 使用別名會報錯,而 ORDER BY 不會報錯?
我們先對salary * 12 命名一個別名annual_sal
SELECT employee_id,salary,salary * 12 annual_sal FROM employees ORDER BY annual_sal;
這段代碼以annual_sal升序輸出且正常執行沒有報錯。說明order by 可以使用別名
我們再看看這個段代碼
SELECT employee_id,salary,salary * 12 annual_sal FROM employees WHERE annual_sal > 81600 ORDER BY annual_sal;
這段代碼就報錯了,報錯說明是Unknown column 'annual_sal' in 'where clause'。由此可以得出where語句執行是找不到annual_sal.
要解決這個問題,我們必須知道sql語句執行順序。
- 先執行from語句用哪個表
- where過濾條件(這時候不知道別名)
- select選擇輸出欄位 (這時候才有別名)
- order by進行排序 (order by 才能使用別名)
總結一下:因為where在sql中執行順序在select(創建別名)之前,所以找不到別名。