sql語言怎麼計算字段?目錄本文介紹什麼是計算字段,如何創建計算字段,我們用例子說明了計算字段在字符串拼接和算術計算中的用途以及如何從應用程序中使用别名引用它們,我來為大家科普一下關于sql語言怎麼計算字段?以下内容希望對你有幫助!
目錄
本文介紹什麼是計算字段,如何創建計算字段,我們用例子說明了計算字段在字符串拼接和算術計算中的用途。以及如何從應用程序中使用别名引用它們。
一、計算字段存儲在數據庫表中的數據一般不是應用程序所需要的格式,下面舉幾個例子。
在上述每個例子中,存儲在表中的數據都不是應用程序所需要的。我們需要直接從數據庫中檢索出轉換、計算或格式化過的數據,而不是檢索出數據,然後再在客戶端應用程序中重新格式化。
這就是計算字段可以派上用場的地方了。計算字段并不實際存在于數據庫表中。計算字段是運行時在 SELECT 語句内創建的。
字段(field)
基本上與列(column)的意思相同,經常互換使用,不過數據庫列一般稱為列,而字段這個術語通常在計算字段這種場合下使用。
需要特别注意,隻有數據庫知道 SELECT 語句中哪些列是實際的表列,哪些列是計算字段。從客戶端(如應用程序)來看,計算字段的數據與其他列的數據的返回方式相同。
提示:客戶端與服務器的格式
在 SQL 語句内可完成的許多轉換和格式化工作都可以直接在客戶端應用程序内完成。但一般來說,在數據庫服務器上完成這些操作比在客戶端中完成要快得多。
二、拼接字段為了說明如何使用計算字段,我們來舉一個簡單例子,創建由兩列組成的标題。
Vendors 表面包含供應商名和地址信息。假如要生成一個供應商報表,需要在格式化的名稱(位置)中列出供應商的位置。
此報表需要一個值,而表中數據存儲在兩個列 vend_name 和 vend_country 中。此外,需要用括号将 vend_country 括起來,這些東西都沒有存儲在數據庫表中。
這個返回供應商名稱和地址的 SELECT 語句很簡單,但我們是如何創建這個組合值的呢?
拼接(concatenate)
将值聯結到一起(将一個值附加到另一個值)構成單個值。
解決辦法是把兩個列車拼接起來。在 SQL 中的 SELECT 語句中,可使用一個特殊的操作符來拼接兩個列。根據你所使用的 DBMS,此操作符可用加号( )或兩個豎杠(||)表示。
在 MySQL 和 MariaDB 中,必須使用特殊的函數。
說明:是 還是 ||?
SQL Server 使用 号。DB2、Oracle、PostgreSQL 和 SQLite 使用 ||。詳細請參閱具體的 DBMS 文檔。
下面是使用加号的例子(大多數 DBMS 使用這種語法):
SELECT vend_name '(' vend_country ')'FROM Vendorsorder BY vend_name;
輸出:
-----------------------------------------------------------Bear Emporium (USA )Bears R Us (USA )Doll House Inc. (USA )Fun and Games (England )Furball Inc. (USA )Jouets et ours (France )
下面是相同的語句,但是使用的是 || 語法:
SELECT vend_name || '(' || vend_country || ')'FROM VendorsORDER BY vend_name;
輸出:
-----------------------------------------------------------Bear Emporium (USA )Bears R Us (USA )Doll House Inc. (USA )Fun and Games (England )Furball Inc. (USA )Jouets et ours (France )
下面是使用 MySQL 或 MariaDB 時常需要使用的語句:
SELECT Concat(vend_name, ' (', vend_country, ')')FROM VendorsORDER BY vend_name;
上面兩個 SELECT 語句拼接成以下元素:
- 存儲在 vend_name 列中的名字;
- 包含一個空格和一個左圓括号的字符串;
- 存儲在 vend_country 列中的國家;
- 包含一個有圓括号的字符串。
從上述輸出中可以看到,SELECT 語句返回包含上述四個元素的一個列(計算字段)。
再看看上述 SELECT 語句返回的輸出。結合成一個計算字段的兩個列用空格填充。許多數據庫(不是所有)保存填充為列寬的文本值,而實際上你要的結果不需要這些空格。
為正确返回格式化的數據,必須去掉這些空格。這可以使用 SQL 的 RTRIM() 函數來完成,如下所示:
SELECT RTRIM(vend_name) ' (' RTRIM(vend_country) ')'FROM VendorsORDER BY vend_name;
輸出:
-----------------------------------------------------------Bear Emporium (USA)Bears R Us (USA)Doll House Inc. (USA)Fun and Games (England)Furball Inc. (USA)Jouets et ours (France)
下面是相同的語句,但是使用的是 ||:
SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'FROM VendorsORDER BY vend_name;
輸出:
-----------------------------------------------------------Bear Emporium (USA)Bears R Us (USA)Doll House Inc. (USA)Fun and Games (England)Furball Inc. (USA)Jouets et ours (France)
RTRIM() 函數去掉值右邊的所有空格。通過使用 RTRIM(),各個列都進行了整理。
說明:TRIM 函數
大多數 DBMS 都支持 RTRIM()(正如剛才所見,它去掉字符串右邊的空格)、LTRIM()(去掉字符串左邊的空格)以及 TRIM()(去掉字符串左右兩邊的空格)。
2.1 使用别名從前面的輸出可以看到,SELECT 語句可以很好地拼接地址字段。但是,這個新計算列的名字是什麼呢?實際上它沒有名字,它隻是一個值。
如果僅在 SQL 查詢工具中查看一下結果,這樣沒有什麼不好。但是,一個未命名的列不能用于客戶端應用中,因為客戶端沒有辦法引用它。
為了解決這個問題,SQL 支持列别名。别名(alias)是一個字段或值的替換名。别名用 AS 關鍵字賦予。請看下面的 SELECT 語句:
SELECT RTRIM(vend_name) ' (' RTRIM(vend_country) ')' AS vend_titleFROM VendorsORDER BY vend_name;
輸出:
vend_title-----------------------------------------------------------Bear Emporium (USA)Bears R Us (USA)Doll House Inc. (USA)Fun and Games (England)Furball Inc. (USA)Jouets et ours (France)
下面是相同的語句,但使用的是 || 語法:
SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')' AS vend_titleFROM VendorsORDER BY vend_name;
下面是 MySQL 和 MariaDB 中使用的語句:
SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') AS vend_titleFROM VendorsORDER BY vend_name;
SELECT 語句本身與以前使用的相同,隻不過這裡的計算字段之後跟了文本 AS vend_title。
它指示 SQL 創建一個包含指定計算結果的名為 vend_title 的計算字段。
從輸出可以看到,結果與以前的相同,但現在列名為 vend_title,任何客戶端應用都可以按名稱引用這個列,就像它是一個實際的表列一樣。
說明:AS 通常可選
在很多 DBMS 中,AS 關鍵字是可選的,不過最好使用它,這被視為一條最佳實踐。
提示:别名的其他用途
别名還有其他用途。常見的用途包括在實際的表列名包含不合法的字符(如空格)時重新命名它,在原來的名字含混或容易誤解時擴充它。
注意:别名
别名的名字既可以是一個單詞,也可以是一個字符串。如果是後者,字符串應該括在引号中。雖然這種做法是合法的,但不建議這麼去做。
多單詞的名字可讀性高,不過會給客戶端應用帶來各種問題。因此,别名最常見的使用是将多個單詞的列名重命名為一個單詞的名字。
說明:導出列
别名有時也稱為導出列(derived column),不管怎麼叫,它們所代表的是相同的東西。
三、執行算術計算計算字段的另一常見用途是對檢索出的數據進行算術計算。舉個例子,Orders 表包含收到的所有訂單,OrderItems 表包含每個訂單中的各項物品。
下面的 SQL 語句檢索訂單号 20008 中的所有物品:
SELECT prod_id, quantity, item_priceFROM OrderItemsWHERE order_num = 20008;
輸出:
prod_id quantity item_price---------- ----------- ---------------------RGAN01 5 4.9900BR03 5 11.9900BNBG01 10 3.4900BNBG02 10 3.4900BNBG03 10 3.4900
item_price 列包含訂單中每項物品的單價。如下彙總物品的價格(單價乘以訂購數量):
SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_priceFROM OrderItemsWHERE order_num = 20008;
輸出:
prod_id quantity item_price expanded_price---------- ----------- ------------ -----------------RGAN01 5 4.9900 24.9500BR03 5 11.9900 59.9500BNBG01 10 3.4900 34.9000BNBG02 10 3.4900 34.9000BNBG03 10 3.4900 34.9000
輸出中顯示的 expanded_price 列是一個計算字段,此計算為 quantity*item_price。客戶端應用現在可以使用這個新計算列,就像使用其他列一樣。
SQL 支持表 1 中列出的基本算術操作符。此外,圓括号可用來區分優先順序。關于優先順序的介紹,請參閱 如何使用 SQL AND、OR、IN 和 NOT 過濾返回的數據。
表 1 SQL 算術操作符
操作符
說明
加
-
減
*
乘
/
除
提示:如何測試計算
SELECT 語句為測試、檢驗函數和計算提供了很好的方法。
雖然 SELECT 通常用于從表中檢索數據,但是省略了 FROM 子句後就是簡單地訪問和處理表達式,例如 SELECT 3 * 2; 将返回 6,SELECT Trim(' abc '); 将返回 abc,SELECT Curdate(); 使用 Curdate() 函數返回當前日期和時間。
現在你明白了,可以根據需要使用 SELECT 語句進行檢驗。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!