10.1 拼接字段
字段(field) 基本上與列( column) 的意思相同,經常互換使用,不過數據庫列一般稱爲列,而術語字段通常用在計算字段的連接上。
拼接(concatenate) 將值聯結到一起構成單個值。
解決辦法是把兩個列拼接起來。在MySQL的SELECT語句中,可使用Concat()
函數來拼接兩個列。
mysql> SELECT Concat(vend_name, '(', vend_country, ')') FROM vendors ORDER BY vend_name;
+-----------------------------------------------+
| Concat(vend_name, '(', vend_country, ')') |
+-----------------------------------------------+
| ACME(USA) |
| Anvils R Us(USA) |
| Furball Inc.(USA) |
| Jet Set(England) |
| Jouets Et Ours(France) |
| LT Supplies(USA) |
+-----------------------------------------------+
- 分析:
Concat()
拼接串,即把多個串連接起來形成一個較長的串。Concat()
需要一個或多個指定的串,各個串之間用逗號分隔。 - 上面的SELECT語句連接以下4個元素:
- 存儲在vend_name列中的名字;
- 包含一個空格和一個左圓括號的串;
- 存儲在vend_country列中的國家;
- 包含一個右圓括號的串。
刪除數據右側多餘的空格來整理數據,這可以使用MySQL的RTrim()
函數來完成,如下所示:
mysql> SELECT Concat(RTrim(vend_name), '(', RTrim('vend_country'), ')') FROM vendors ORDER BY vend_name;
+-------------------------------------------------------------+
| Concat(RTrim(vend_name), '(', RTrim('vend_country'), ')') |
+-------------------------------------------------------------+
| ACME(vend_country) |
| Anvils R Us(vend_country) |
| Furball Inc.(vend_country) |
| Jet Set(vend_country) |
| Jouets Et Ours(vend_country) |
| LT Supplies(vend_country) |
+-------------------------------------------------------------+
- 分析:
RTrim()
函數去掉值右邊的所有空格。通過使用RTrim()
,各個列都進行了整理。
Trim函數 MySQL除了支持
RTrim()
(正如剛纔所見,它去掉串右邊的空格),還支持LTrim()
(去掉串左邊的空格)以及Trim()
(去掉串左右兩邊的空格)。
SQL支持列別名。 別名( alias) 是一個字段或值的替換名。別名用AS關鍵字賦予。請看下面的SELECT語句:
mysql> SELECT Concat(RTrim(vend_name), '(', RTrim('vend_country'), ')') AS vend_title FROM vendors ORDER BY vend_name;
+--------------------------------+
| vend_title |
+--------------------------------+
| ACME(vend_country) |
| Anvils R Us(vend_country) |
| Furball Inc.(vend_country) |
| Jet Set(vend_country) |
| Jouets Et Ours(vend_country) |
| LT Supplies(vend_country) |
+--------------------------------+
- 分析:SELECT語句本身與以前使用的相同,只不過這裏的語句中計算字段之後跟了文本
AS vend_title
。它指示SQL創建一個包含指定計算的名爲vend_title
的計算字段。從輸出中可以看到,結果與以前的相同,但現在列名爲vend_title
,任何客戶機應用都可以按名引用這個列,就像它是一個實際的表列一樣。
別名的其他用途:別名還有其他用途。常見的用途包括在實際的表列名包含不符合規定的字符(如空格)時重新命名它,在原來的名字含混或容易誤解時擴充它,等等。
導出列:別名有時也稱爲導出列( derived column),不管稱爲什麼,它們所代表的都是相同的東西。
10.2 執行算術計算
彙總物品的價格(單價乘以訂購數量):
mysql> SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 20005;
+---------+----------+------------+----------------+
| prod_id | quantity | item_price | expanded_price |
+---------+----------+------------+----------------+
| ANV01 | 10 | 5.99 | 59.90 |
| ANV02 | 3 | 9.99 | 29.97 |
| TNT2 | 5 | 10.00 | 50.00 |
| FB | 1 | 10.00 | 10.00 |
+---------+----------+------------+----------------+
- 分析:輸出中顯示的
expanded_price
列爲一個計算字段,此計算爲quantity*item_price
。客戶機應用現在可以使用這個新計算列,就像使用其他列一樣。
操 作 符 | 說 明 |
---|---|
+ | 加 |
- | 減 |
* | 乘 |
/ | 除 |
如何測試計算:
SELECT
提供了測試和試驗函數與計算的一個很好的辦法。雖然SELECT
通常用來從表中檢索數據,但可以省略FROM
子句以便簡單地訪問和處理表達式。例如,SELECT 3*2;
將返回6
,SELECT Trim('abc ');
將返回abc
,而SELECT Now()
利用Now()
函數返回當前日期和時間。通過這些例子,可以明白如何根據需要使用SELECT
進行試驗。