計算欄位
存在資料庫系統中的資料的預設展現方式不一定完全符合應用的要求,比如:
1,資料庫系統中姓名、工號是單獨儲存在兩個欄位的,但是在顯示的時候想顯示成“姓名+工號”的形式。
2,資料庫系統中金額的顯示格式是普通的數字顯示方式(比如668186.99),但是顯示的時候想以千分位的形式顯示(比如668,186.99)。
3,資料庫系統中基本工資、獎金是單獨儲存在兩個欄位的,但是希望顯示員工的工資總額。
4,要檢索工資總額的80%超過5000元的員工資訊。
5,要升級員工工號,需要將所有員工的工號前增加兩位0。
所有這些功能都不能通過簡單的SQL語句來完成的,因為需要的資料不是資料表中本來就有的,必須經過一定的計算、轉換或者格式化,這種情況下我們可以在宿主語言中通過編寫程式碼的方式來進行這些計算、轉換或者格式化的工作,但是可以想象當資料量比較大的時候這樣處理的速度是非常慢的。計算欄位是資料庫系統提供的對資料進行計算、轉換或者格式化的功能,由於是在資料庫系統內部進行的這些工作,而且資料庫系統都這些工作進行了優化,所以其處理效率比在宿主語言中通過編寫程式碼的方式進行處理要高效的多。本節將介紹計算欄位的基本使用以及在SELECT、Update、Delete等語句中的應用。
- 常量欄位
軟體協會要求各個公司提供所有員工的資料資訊,其中包括公司名稱、註冊資本、員工姓名、年齡、所在子公司,而且出於特殊考慮,要求每個員工都列出這些資料資訊。對於單個公司而言,公司名稱、註冊資本這兩部分資訊不是能從現有的T_Employee,但是它們是確定的值,因此我們編寫下面的SQL語句:
SELECT "CowNew集團",918000000,FName,FAge,FSubCompany FROM T_Employee
這裡的"CowNew集團"和918000000並不是一個實際的存在的列,但是在查詢出來的資料中它們看起來是一個實際存在的欄位,這樣的欄位被稱為“常量欄位”(也稱為“常量值”),它們完全可以被看成一個值確定的欄位,比如可以為常量欄位指定別名,執行下面的SQL語句:
SELECT "CowNew 集團" AS CompanyName,918000000 AS RegAmount,FName,FAge,FSubCompany FROM T_Employee
- 欄位間計算
人力資源部要求統計全體員工的工資指數,工資指數的計算公式為年齡與工資的乘積,這就需要計算將FAge和FSalary的乘積做為一個工資指數列體現到檢索結果中,執行下面的SQL語句:
SELECT FNumber,FName,FAge * FSalary FROM T_Employee
同樣,這裡的FAge * FSalary並不是一個實際的存在的列,但是在查詢出來的資料中它們看起來是一個實際存在的欄位,它們完全可以被看成一個普通欄位,比如可以為此欄位指定別名,執行下面的SQL語句:
SELECT FNumber,FName,FAge * FSalary AS FSalaryIndex FROM T_Employee
前面提到常量欄位完全可以當作普通欄位來看待,那麼普通欄位也可以和常量欄位進行計算,甚至常量欄位之間也可以進行計算。比如人力資源部要求統計每個員工的工資幸福指數,工資幸福指數的計算公式為工資/(年齡-21),而且要求在每行資料前新增一列,這列
的值等於125與521的和。我們編寫下面的SQL:
SELECT 125+521,FNumber,FName,FSalary/(FAge-21) AS FHappyIndex FROM T_Employee
計算欄位也可以在WHERE語句等子句或者UPDATE、DELETE中使用。比如下面的SQL用來檢索所有資幸福指數大於1000的員工資訊:
SELECT * FROM T_Employee WHERE FSalary/(FAge-21)>1000