SQL必知必会阅读笔记,作者(Ben Forta)学习贴2

书接上回。

7.创建计算字段

介绍什么是计算字段,如何创建计算字段,以及如何从应用程序 中使用别名引用它们。

7.1计算字段

存储在数据库表中的数据一般不是应用程序所需要的格式,下面举几个 例子。

 需要显示公司名,同时还需要显示公司的地址,但这两个信息存储在 不同的表列中。

 物品订单表存储物品的价格和数量,不存储每个物品的总价格(用价 格乘以数量即可)。但为打印发票,需要物品的总价格。

在上述每个例子中,存储在表中的数据都不是应用程序所需要的。我们 需要直接从数据库中检索出转换、计算或格式化过的数据,而不是检索 出数据,然后再在客户端应用程序中重新格式化。

这就是计算字段可以派上用场的地方了。与前几课介绍的列不同,计算 字段并不实际存在于数据库表中。计算字段是运行时在 SELECT 语句内 创建的。

字段(field) 基本上与列(column)的意思相同,经常互换使用,不过数据库列一 般称为列,而字段这个术语通常在计算字段这种场合下使用。

需要特别注意,只有数据库知道 SELECT 语句中哪些列是实际的表列, 哪些列是计算字段。从客户端(如应用程序)来看,计算字段的数据与 其他列的数据的返回方式相同。

提示:客户端与服务器的格式 在 SQL 语句内可完成的许多转换和格式化工作都可以直接在客户端 应用程序内完成。但一般来说,在数据库服务器上完成这些操作比在 客户端中完成要快得多。

7.2拼接字段

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

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

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

下面是使用 MySQL 或 MariaDB 时需要使用的语句:

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

 

许多数据库(不是所有)保存填充为列宽的文本值,而实际 上你要的结果不需要这些空格。为正确返回格式化的数据,必须去掉这些空格。这可以使用 SQL 的 RTRIM()函数来完成。

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

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

使用别名

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

 SQL 支持列别名。别名(alias)是一个字段或值的 替换名。别名用 AS 关键字赋予。请看下面的 SELECT 语句:

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

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

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

 任何客户端应用都可以按名称引用这个列,就像 它是一个实际的表列一样。

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

提示:别名的其他用途 别名还有其他用途。常见的用途包括在实际的表列名包含不合法的 字符(如空格)时重新命名它,在原来的名字含混或容易误解时扩 充它。

注意:别名 别名的名字既可以是一个单词,也可以是一个字符串。如果是后者, 字符串应该括在引号中。虽然这种做法是合法的,但不建议这么去做。 多单词的名字可读性高,不过会给客户端应用带来各种问题。因此, 别名最常见的使用是将多个单词的列名重命名为一个单词的名字。

说明:导出列 别名有时也称为导出列(derived column),不管怎么叫,它们所代表 的是相同的东西。

7.3执行算数计算

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

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

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

客户端应用现在可以使用这个新计算列,就像使用其他列 一样。(数据库不行)

提示:如何测试计算 SELECT 语句为测试、检验函数和计算提供了很好的方法。虽然 SELECT 通常用于从表中检索数据,但是省略了 FROM 子句后就是简单地访问和 处理表达式,例如 SELECT 3 * 2;将返回 6,SELECT Trim(' abc '); 将返回 abc,SELECT Curdate();使用 Curdate()函数返回当前日期 和时间。现在你明白了,可以根据需要使用 SELECT 语句进行检验。

7.4 挑战题

1. 别名的常见用法是在检索出的结果中重命名表的列字段(为了符合特 定的报表要求或客户需求)。编写 SQL 语句,从 Vendors 表中检索 vend_id、vend_name、vend_address 和 vend_city,将 vend_name 重命名为 vname

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值