学习目标

计算字段(calculated field)

关键字: AS

使用计算字段,我们可以做如下的事情:

  • 选择特定的单词或者数值;
  • 对单个或多个列进行计算;
  • 把列和特定的单词或数值组合在一起。
    接下来,我们来看一些示例,这些示例都来自于如下的Sales表:

SalesID

FirstName

LastName

QuantityPurchased

PricePerItem

1

Andrew

Li

4

2.50

2

Carol

White

10

1.25

3

James

Carpenter

5

4.00

内容结构

三、计算字段和别名

3.1 字面值

选择一个特定的值作为一个列,这个值和表中的数据没有任何关系,这种类型的表达式叫做字面值(literal value)。示例如下:

SELECT 
'First Name:',
FirstName
FROM Sales

这条语句返回的数据如下所示:

no column name

FirstName

First Name:

Andrew

First Name:

Carol

First Name:

James

在这条语句中,选择了两个数据项。首先是字面值’First Name:',单引号用来表示这是一个字符字面值,第2个数据项是FirstName列。

注意:(1)字面值’First Name:'在每一行都会重复出现,(2)第1列没有表头信息。当在Microsoft SQL Server中运行时 ,列的表头显示为“(no column name)”,因为计算字段没有和盖淑菊相关的列名。

数据库的差异:MySQL和Oracle
MySQL和Oracle都会在表头针对字面值返回一个值。
(1)在MySQL中,上述示例的第1列的表头会显示为:First Name:
(2)在Oracle中,上述示例的第1列的表头会显示为:‘FIRSTNAME:’

补充:
(1)表头是一种有意义的标签,别名是为列提供表头的一种方法。
(2)字面值是数字时,不需要加引号

3.2 算术运算

算术运算可以对表中一个或多个列进行计算,例如:

SELECT 
SalesID,
QuantityPurchased,
PricePerItem,
QuantityPurchased * PricePerItem
FROM Sales

将返回如下数据:

SalesID

QuantityPurchased

PricePerItem

(no column name)

1

4

2.50

10.00

2

10

1.25

12.50

3

5

4.00

20.00

和字面值一样,第4列也没有表头,因为它并不是派生自一个单独的列。

下面是一些最常用的算术运算符:

算术运算符

含义

+

相加

-

相减

*

乘法

/

除法

数据库的差异:Oracle
与SQL Server和MySQL不用,Oracle提供求幂运算的数学运算符,用两个星号(**)表示。

3.3 连接字段

连接(Concatenation)表示把字符数据组合或连接到一起。
就像算术运算符能够处理数字数据一样,字符数据也可以组合或连接到一起。如下是Microsoft SQL Server中的示例:

SELECT 
SalesID,
FirstName,
LastName + ' ' + FirstName
FROM Sales

检索到的数据如下所示:

SalesID

FirstName

LastName

(no column name)

1

Andrew

Li

Andrew Li

2

Carol

White

Carol White

3

James

Carpenter

James Carpenter

第4列从SQL语句中如下的表达式派生而来:

LastName + ' ' + FirstName

数据库的差异:MySQL和Oracle

(1)MySQL不用符号(诸如+)来表示连接,而是调用一个名为CONCAT的函数进行连接,如下所示:

CONCAT(LastName, ' ', FirstName)

CONCAT将括号中的3部分合并成一个表达式。

(2)Oracle使用两根竖线(||)而不是加号(+)来表示连接,等价语句如下所示:

LastName || ' ' || FirstName

3.4 列的别名

为没有描述性表头的列指定一个具有描述性的表头,解决方法是使用列的别名。
**别名(data)**本意是指替代名称,如下所示:

SELECT 
SalesID,
FirstName,
LastName + ' ' + FirstName AS 'Name'
FROM Sales

注意:列的别名要用单引号括起来。输出结果如下:

SalesID

FirstName

LastName

Name

1

Andrew

Li

Andrew Li

2

Carol

White

Carol White

3

James

Carpenter

James Carpenter

假设表有一个名为“Qty”的列,可以使用如下语句,把该列显示为“Quantity Purchased”:

SELECT
Qty AS 'Quantity Purchased'
FROM table

数据库的差异:Oracle

Oracle使用双引号来表示列的别名。

示例如下:

LastName + ' ' + FirstName AS "Name"

3.5 表的别名

使用相同的关键字AS来为表指定别名。

使用表的别名一般有3个原因:

(1)针对不好理解或复杂的表名;

(2)使用表的别名作为表中任何选中列的前缀;

假设有一个名为Sales123的表,给它一个Sales作为别名,并且添加Sales作为LastName列的前缀,使用点来分隔前缀和列名。示例如下:

SELECT
Sales.LastName
FROM Sales123 AS Sales

(3)和在子查询中使用表有关,这部分内容在第14节介绍。

数据库的差异:Oracle

在Oracle中,关键字AS可以用于列的别名,但在指定表的别名时,不允许使用关键字AS。语法如下:

SELECT
Sales.LastName
FROM Sales123 Orders

3.6 小结

在本节中,我们学习了在SELECT语句中创建计算字段的3种主要方法
(1)首先,用字面值来选择具体的单词或值。
(2)其次,在一个单个的表达式中,可以对多列执行算术运算。
(3)最后,用连接把列和字面值组合在一起。

我们还介绍了和列的别名相关的主题,当使用计算字段时,经常会用到列的别名。

接下来的第4节,我将给大家介绍函数这个主题,它提供了更加复杂和更加有趣的方法来执行计算。