创建计算字段
存储在数据库表中的数据一般不是应用程序所需的格式。我们需要直接从数据库中检索出转换、计算或格式化过的数据; 而不是检索出数据, 然后再在客户机应用程序上重新格式化。这就是计算字段的作用。
计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的。
需要注意的是, 只有数据库知道SELECT语句中哪些列是实际的表列, 哪些列是计算字段。在客户机角度来看, 计算字段的数据是以与其他列的数据相同的方式返回的。
拼接字段
拼接(concatenate): 将值联结到一起构成单个值
在MySQL的SELECT语句中, 可使用Connat()函数来拼接两个列
MySQL的不同之处
多数DBMS使用+或||来实现拼接, MySQL则使用Concat()函数来实现。
MariaDB [crashcourse]> 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) | +-------------------------------------------+ 6 rows in set (0.003 sec) MariaDB [crashcourse]>
Concat()拼接串, 即把多个串连接起来形成一个较长的串。Concat()需要一个或多个指定的串, 各个串之间使用逗号分隔。
删除数据右侧多余的空格来整理数据, 这可以使用MySQL的RTrim()函数来完成。
MariaDB [crashcourse]> SELECT Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') FROM vendors ORDER BY vend_name; +---------------------------------------------------------+ | Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') | +---------------------------------------------------------+ | ACME(USA) | | Anvils R Us(USA) | | Furball Inc.(USA) | | Jet Set(England) | | Jouets Et Ours(France) | | LT Supplies(USA) | +---------------------------------------------------------+ 6 rows in set (0.003 sec) MariaDB [crashcourse]>
Trim函数
MySQL除了支持RTrim函数()(去掉串右边的空格)之外, 还支持LTrim()(去掉串左边的空格)以及Trim()(去掉串左右两边的空格)
使用别名
SELECT拼接计算字段中, 新计算出来列的名字其实不是名字, 它只是一个值。一个未命名的列不能应用于客户机应用中, 因为客户机没办法引用它。
为了解决这个问题, SQL还支持列别名。别名(alias)是一个字段或值的替换名。别名用AS关键字赋予
MariaDB [crashcourse]> SELECT Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') AS vend_title FROM vendors ORDER BY vend_name; +------------------------+ | vend_title | +------------------------+ | ACME(USA) | | Anvils R Us(USA) | | Furball Inc.(USA) | | Jet Set(England) | | Jouets Et Ours(France) | | LT Supplies(USA) | +------------------------+ 6 rows in set (0.001 sec) MariaDB [crashcourse]>
它指示SQL创建一个包含指定计算的名为vend_title的计算字段。现在列名为vend_title, 任何客户机应用都可以按名引用这个列。就像它是一个实际的表列一样。
执行算术计算
计算字段的另一常见的用途是对检索出的数据进行算术计算。
MariaDB [crashcourse]> 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 | +---------+----------+------------+----------------+ 4 rows in set (0.000 sec) MariaDB [crashcourse]>
MySQL支持表中列出的基本算术运算操作符。 此外, 圆括号可用来区分优先顺序。
如何测试计算
SELECT提供了测试和试验函数与计算的一个很好的办法。可以忽略FROM子句以便简单地访问和处理表达式。
例如: SELECT 3*2; 将返回6, SELECT Trim('abc '); 将返回abc, 而SELECT Now()利用Now()函数返回当前日期和时间。