SQL 支援使用別名來為資料表或欄位指定暫時的名稱。別名不僅可以減少打字量,還可以使查詢更加易讀和易懂。在今天的文章中,我們將學習如何使用 Navicat Premium 16.2 在查詢中加入別名。
SQL 別名概述
如介紹中所述,資料表和欄位名稱都可以使用別名。以下是各自的語法:
別名欄位語法
SELECT column_name [AS] alias_name, column_name AS 'Alias Name' -- for names with spaces FROM table_name;
別名資料表語法
SELECT column_name(s) FROM table_name [AS] alias_name;
有兩個關於使用別名的要點需要考慮:
- 別名通常使用 AS 關鍵字來指定,但也可以選擇省略。
- 別名只存在於該查詢時間內。
在 JOIN 查詢中的資料表別名
以下是一個針對 Sakila 範本資料庫的查詢,用於擷取關於特定電影所有副本的資訊:
SELECT * FROM film f INNER JOIN inventory i ON i.film_id = f.film_id WHERE i.store_id = 1 AND f.title = "Academy Dinosaur";
在上述查詢中,由於 film 和 inventory 資料表都包含 film_id 欄位,因此必須是完整名稱,即在欄位名稱前加上資料表名稱。在這種情況下,就可以使用別名來縮短查詢語句。
以下是在 Navicat 中的查詢及其結果:
欄位別名
在欄位名稱方面,設計資料庫資料表時通常會使用縮寫來簡化欄位名稱。例如:
- "so_no" 代表 "sales order number"。
- "qty" 代表 "quantity"。
在這種情況下,你可以使用欄位別名來使欄位內容更加直觀易懂。以下是一個例子:
SELECT inv_no AS invoice_no, amount, due_date AS 'Due date', cust_no 'Customer No' FROM invoices;
當然,你也可以為運算式指定欄位別名,如下圖所示:
上述查詢選取了產品目前的價格和漲價後的價格。
欄位別名的限制
由於欄位別名是在 SELECT 子句中指定的,因此你只能在 SELECT 子句之後評估的子句中參考該欄位別名。因此,你不能在 WHERE 子句中使用別名,這樣做會導致錯誤:
這是因為資料庫在評估 SELECT 子句之前評估 WHERE 子句。因此,在評估 WHERE 子句時,資料庫沒有 NewPrice 欄位別名的資訊。
但是,在 ORDER BY 子句中使用欄位別名是可以的,因為它是在 SELECT 子句之後評估的:
資料庫按以下順序評估查詢的子句:
FROM > SELECT > ORDER BY
資料表別名與 Navicat
在 Navicat 中,一旦定義了資料表別名,它將出現在自動完成清單中。
因此,使用別名就更加省時方便!
關於使用資料庫別名的結語
在今天的文章中,我們學習了如何在使用 Navicat Premium 16.2 在查詢中加入別名。它是一種可使查詢更加易讀和易懂的簡單方法,這是很重要的,因為程式碼不僅僅是用於執行,還是一種溝通機制。