第7课 创建计算字段

第7课 创建计算字段

7.1 计算字段

计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的。

7.2 拼接字段

拼接(concatenate)
将值联结到一起(将一个值附加到另一个值)构成单个值。

解决办法是把两个列拼接起来。在SQL中的SELECT语句中,可使用一个特殊的操作符来拼接两个列。根据你所使用的DBMS,此操作符可用加号(+)或两个竖杠(||)表示。在MySQL和MariaDB中,必须使用特殊的函数。

说明:是+还是||?
Access和SQL Server使用+号。DB2、Oracle、PostgreSQL、SQLite和Open Office Base使用||。详细请参阅具体的DBMS文档。

下面是使用加号的例子(多数DBMS使用这种语法):

SELECT vend_name + ' (' + vend_country + ')'
FROM Vendors
ORDER BY vend_name;

下面是相同的语句,但使用的是||语法:

SELECT vend_name || ' (' || vend_country || ')'
FROM Vendors
ORDER BY vend_name; 

上面两个SELECT语句拼接以下元素:

  • 存储在vend_name列中的名字;
  • 包含一个空格和一个左圆括号的字符串;
  • 存储在vend_country列中的国家;
  • 包含一个右圆括号的字符串。

从上述输出中可以看到,SELECT语句返回包含上述四个元素的一个列(计算字段)。

为正确返回格式化的数据,必须去掉这些空格。这可以使用SQL的RTRIM()函数来完成,如下所示:

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
FROM Vendors
ORDER BY vend_name;

RTRIM()函数去掉值右边的所有空格。通过使用RTRIM(),各个列都进行了整理。

说明:TRIM函数
大多数DBMS都支持RTRIM()(正如刚才所见,它去掉字符串右边的空格)、LTRIM()(去掉字符串左边的空格)以及TRIM()(去掉字符串左右两边的空格)。

使用别名

SELECT语句可以很好地拼接地址字段。但是,这个新计算列的名字是什么呢?实际上它没有名字,它只是一个值。如果仅在SQL查询工具中查看一下结果,这样没有什么不好。但是,一个未命名的列不能用于客户端应用中,因为客户端没有办法引用它。

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')' 
       AS vend_title
FROM Vendors
ORDER BY vend_name;

下面是MySQL和MariaDB中使用的语句:

SELECT Concat(vend_name, ' (', vend_country, ')')
       AS vend_title
FROM Vendors
ORDER BY vend_name;

它指示SQL创建一个包含指定计算结果的名为vend_title的计算字段。从输出可以看到,结果与以前的相同,但现在列名为vend_title,任何客户端应用都可以按名称引用这个列,就像它是一个实际的表列一样。

说明:AS通常可选
在很多DBMS中,AS关键字是可选的,不过最好使用它,这被视为一条最佳实践。

7.3 执行算术计算

计算字段的另一常见用途是对检索出的数据进行算术计算。

item_price列包含订单中每项物品的单价。如下汇总物品的价格(单价乘以订购数量):

SELECT prod_id,
       quantity,
       item_price,
       quantity*item_price AS expanded_price
FROM OrderItems
WHERE order_num = 20008; 

输出中显示的expanded_price列是一个计算字段,此计算为quantity*item_price。客户端应用现在可以使用这个新计算列,就像使用其他列一样。

7.4 小结

这一课介绍了计算字段以及如何创建计算字段。我们用例子说明了计算字段在字符串拼接和算术计算中的用途。此外,还讲述了如何创建和使用别名,以便应用程序能引用计算字段。

原文地址:https://www.cnblogs.com/zhangsonghui/p/12944453.html