TOP

SQL-第 6 课。计算(计算)字段

为什么要使用计算字段?通常,数据库中的信息以单独片段的形式呈现,因为更容易构建数据并对其进行操作。然而,我们通常需要使用的不是单独的数据,而是已经组合和处理过的信息。例如,通常需要组合客户的名字和姓氏,组合表中不同列中的地址元素,处理文本和单个单词、字母和符号,以总结购买的总成本,显示数据库中信息的统计信息。数据通常存储在单独的“块”中,这需要在客户端程序方面进行额外的处理。但是,可以使用 DBMS 接收已处理的信息。在这种情况下,计算字段会有所帮助。它们是在执行查询时自动创建的,并且具有表中已存在的普通列的外观和属性。唯一的区别是没有物理计算字段,因此它们不会占用DB中的额外空间,而是暂时存在于DBMS的“随机内存”中。在DBMS端执行操作的优点是数据处理的速度。


1. 进行数学运算

使用计算字段的一种方法是对选定数据执行数学运算。让我们再次使用 Sumproduct 表来举例说明这是如何发生的。假设您需要计算每种产品的平均购买价格。为此,您需要将 Amount 列重新分配给 Quantity(数量):

Run SQLSELECT DISTINCT Product, Amount/Quantity 
FROM Sumproduct

正如您所看到的,DBMS 选择了所有产品名称,并在查询执行期间创建的单独列中显示其平均成本。您还可以注意到,我们使用了额外的运算符 DISTINCT,我们需要显示唯一的产品名称(如果没有它,我们将有重复的记录)。

2. 使用假名

在前面的示例中,我们计算了每种产品的平均购买价格并将该值显示在计算栏中。但是,将来我们引用这个字段会很不方便,因为它的名称对我们来说没有任何信息(DBMS 给了该字段的名称 - Expr1001)。但是,我们可以通过提前在查询中指定字段名称来独立命名字段,即给出别名。让我们重写前面的示例并为计算字段指定一个别名:

Run SQLSELECT DISTINCT Product, Amount/Quantity AS AvgPrice 
FROM Sumproduct

我们看到我们的计算字段有了自己的名称 AvgPrice。为此,我们使用了运算符 AS,然后指定了所需的名称。需要注意的是,SQL 中仅支持基本的数学运算:加法(+)、减法(-)、乘法(*)、除法(/)。您还可以使用圆括号来更改操作顺序。

别名通常不仅用于命名计算字段,还用于重命名活动字段。如果活动字段的名称很长或名称信息不够丰富,则这可能是必要的。

3. 字段的连接(concatenation)

除了数学运算之外,我们还可以组合文本并将其显示在单独的字段中。让我们考虑一下如何粘合(连接)文本。要连接 MS Access 中不同列的文本,请使用加号运算符 (+),例如:

Run SQLSELECT Month + ' ' + Product AS NewField, Quantity  
FROM Sumproduct

在这个例子中,我们将两列中的值组合起来,并将结果输出到一个新字段NewField。

MySQL 方言不支持使用加号运算符 (+) 来连接(串联)多列中的文本。在这种情况下,请使用 CONCAT() 函数。