計算欄位並不實際存在於資料庫表中。計算欄位是執行時在SELECT語句內建立的。
需要注意的是,只有資料庫知道SELECT語句中哪些列是實際的表列,哪些列是計算欄位。從客戶機(如應用程式)的角度來看,計算欄位的資料是以與其他列的資料相同的方式返回的。
在MySQL的SELECT語句中,可使用Concat()函數來拼接兩個列。
多數DBMS使用+或||來實現拼接,MySQL則使用Concat()函數來實現。當把SQL語句轉換成MySQL語句時一定要把這個區別銘記在心。
在用concat拼接串時,為刪除資料多餘的空格來整理資料,這可以使用MySQL的Trim()函數來完成。RTrim()函數去掉值右邊的所有空格,LTrim()函數去掉串左邊的空格,Trim()函數去掉串左右兩邊的空格。
前面已經做了拼接,但是它沒有名字,它只是一個值。一個未
命名的列不能用於客戶機應用中,因為客戶機沒有辦法引它。
為了解決這個問題,SQL支援列別名。別名是一個欄位或值的替換名。別名用AS關鍵字賦予。有了別名後,任何客戶機應用都可以按名參照這個列,就像它是一個實際的表列一樣。
別名還有其他用途。常見的用途包括在實際的表列名包含不符合規定的字元(如空格)時重新命名它,在原來的名字含混或容易誤解時擴充它。
計算欄位的另一常見用途是對檢索出的資料進行算術計算。
MySQL支援的基本算術操作符有+、-、*、\。此外,圓括號可用來區分優先順序。
USE lu_test;
-- 按照name(location)這樣的格式列出供應商的位置
SELECT CONCAT (vend_name, '(', vend_country, ')') FROM vendors ORDER BY vend_name;
-- 拼接串時,可用trim(函數)去除多餘空格
SELECT CONCAT (RTRIM(vend_name), '(', TRIM(vend_country), ')') FROM vendors ORDER BY vend_name;
-- 賦予別名
SELECT CONCAT (RTRIM(vend_name), '(', TRIM(vend_country), ')') AS vend_title FROM vendors ORDER BY vend_name;
-- 彙總計算物品的價格
SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 20005;