使用表別名進行選擇
SELECT e.Fname, e.LName
FROM Employees e
Employees 表在表名後直接給出別名 e
。這有助於消除多個表具有相同欄位名稱的情況下的歧義,並且你需要具體說明要從哪個表返回資料。
SELECT e.Fname, e.LName, m.Fname AS ManagerFirstName
FROM Employees e
JOIN Managers m ON e.ManagerId = m.Id
請注意,一旦定義了別名,就不能再使用規範表名。即
SELECT e.Fname, Employees.LName, m.Fname AS ManagerFirstName
FROM Employees e
JOIN Managers m ON e.ManagerId = m.Id
會丟擲錯誤。
值得注意的是,表別名 - 更正式的’範圍變數’ - 被引入到 SQL 語言中以解決由 INNER JOIN
引起的重複列問題。1992 年的 SQL 標準通過引入 NATURAL JOIN
(在 mySQL,PostgreSQL 和 Oracle 中實現但在 SQL Server 中尚未實現)糾正了此早期的設計缺陷,其結果從未具有重複的列名。上面的例子很有趣,因為這些表連線在具有不同名稱的列(Id
和 ManagerId
)上,但不應該在具有相同名稱的列(LName
,FName
)上連線,需要重新命名要執行的列在加入之前 :
SELECT Fname, LName, ManagerFirstName
FROM Employees
NATURAL JOIN
( SELECT Id AS ManagerId, Fname AS ManagerFirstName
FROM Managers ) m;
請注意,雖然必須為 dervied 表宣告別名/範圍變數(否則 SQL 將引發錯誤),但在查詢中實際使用它是沒有意義的。