计算字段
什么是计算字段呢?
当存储在数据库表中的数据不能直接满足我们的需求时,就需要我们利用已有的字段,创造出所需内容。比如:省、市、县、邮政编码存储在不同的字段中,而我们需要三者组合在一起的格式化信息;再比如订单表存储了商品的价格和数量,而我们却需要知道每类物品的总价格。
这就需要我们使用计算字段了,计算字段并不实际存在于数据库表中,而是运行时在 SELECT 语句内创建的。下面,我们来学习计算字段中常见的两种形式。
拼接字段
供应商表的信息如下:
接下来,我们将创建计算字段来将 vend_name
和 vend_country
组合在一起。
SELECT vend_name || '(' || vend_country || ')'
FROM Vendors
ORDER BY vend_name;
运行结果:
注 1:不同的 DBMS 实现字符串拼接的方式不同。小鱼这里使用的是 SQLite ,拼接操作符为
||
,DB2、Oracle、PostgreSQL 使用的也是||
。SQL Server 使用的拼接符为+
,MySQL 和 MariaDB 使用的则是函数Concat
.
许多数据库保存填充为列宽的文本值,这就会导致字符串右侧可能出现空格,使用 RTRIM 函数可以去除字符串右侧的空格。
SELECT RTRIM(vend_name) || '(' || RTRIM(vend_country) || ')'
FROM Vendors
ORDER BY vend_name;
运行结果:
注 2:大多数 DBMS 都支持
RTRIM()
删除字符串右侧空格、LTRIM
删除字符串左侧空格和TRIM
删除字符串两侧空格。
以上检索结果中,计算字段默认的字段名称为 SELECT
语句中创建计算字段的 SQL:RTRIM(vend_name) || '(' || RTRIM(vend_country) || ')'
。其实,我们可以使用 AS
关键字为字段取一个别名:
SELECT RTRIM(vend_name) || '(' || RTRIM(vend_country) || ')' AS vend_title
FROM Vendors
ORDER BY vend_name;
检索结果:
除了计算字段,当实际的列名包含不合法字符(如空格)时,也可以用 AS
为列指定别名;在原来的列名不够明确时,也会用 AS
指定别名。
执行算数计算
计算字段的另一种常见用途是对检索出来的数据进行算数运算。订单明细表如下:
接下来,假设我们需要检索订单号为 20008
的订单,购买的每种商品的单价、数量以及每种商品支付的总价。其中,单价和数量可以直接检索得到:
SELECT prod_id, quantity, item_price
FROM OrderItems
WHERE order_num=20008;
检索结果:
创建计算字段 expand_price
计算每类商品支付的总价:
SELECT prod_id, quantity, item_price, quantity*item_price AS expand_price
FROM OrderItems
WHERE order_num=20008;
检索结果:
SELECT 语句用于数据检索,但省略 FROM 子句后,却是一个测试、检验函数和计算的好工具。
用于测试计算:
SELECT 3*4;
用于测试函数:
SELECT TRIM(' mia ');
测试输出:
SELECT CURRENT_DATE
总结
本节,我们学习了计算字段以及如何创建计算字段,期间还介绍了创建及使用别名的方法。
网友评论