开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情
一、前言
大家好,今天文章的内容是:
- 【计算字段】
二、内容
2.1、什么是计算字段?
计算字段是运行时在SELECT语句内创建的,进行计算、转换或格式化后的数据。注意,计算字段并不实际存在于数据库表中。
字段(
field)基本上与列(column)的意思相同,经常互换使用。不过数据库列一般称为列,而术语字段通常用在计算字段的连接上。
计算字段的应用场景有很多,比如:
- 大部分应用程序需要的数据在表中其实是由多个列组合而成的,比如我们想在一个字段中既要显示供应商的名字,又要显示其位置信息,但这两个信息一般存储在不同的表列中,这时我们就需要从数据库中检索出转换后的数据;
- 表中数据是大小写混合的,我们需要把所有数据按大写表示出来,这时就需要将数据格式化;
- 物品订单中一般存储物品的价格和数量,而不需要存储每个物品的总价格,如果要打印发票,就需要计算物品的总价格(用单价乘以数量即可),这时我们就需要根据表数据进行数值计算。
2.2、拼接字段
举一个简单的计算字段的例子,即拼接字段(将若干个值联结到一起构成单个值)。
在MySQL中,我们可以使用Concat()函数来拼接两个列。
Concat()函数用于拼接若干个串,即把多个串连接起来形成一个较长的串。Concat()函数的参数为一个或多个指定的串,各个串之间用逗号分隔。
举个例子,学生表stu_tbl包含了学生的名字以及家乡信息,现在需要生成一个计算字段,按照name(location)的格式来列出学生的信息。
也就是说,下面SELECT语句返回一个计算字段(包含 4 个元素的单个列)。
mysql> SELECT Concat(stu_name, ' (', stu_city, ')')
FROM stu_tbl
ORDER BY stu_id;
+---------------------------------------+
| Concat(stu_name, ' (', stu_city, ')') |
+---------------------------------------+
| 刘一 (北京) |
| 陈二 (上海) |
| 张三 (广州) |
| 李四 (深圳) |
| 王五 (天津) |
| 赵六 (成都) |
| 孙七 (杭州) |
| 周八 (苏州) |
| 吴九 (重庆) |
| 郑十 (武汉) |
+---------------------------------------+
10 rows in set (0.00 sec)
上述SELECT语句连接以下4个元素:
- 存储在
stu_name列中的学生名字; - 包含一个空格和一个左圆括号的串,即
(; - 存储在
stu_city列中的城市信息; - 包含一个右圆括号的串,即
)。
2.3、使用别名
在之前输出的信息中可以发现,该计算字段是没有名字的。
为了方便客户机应用去引用新计算列,我们可以使用别名。
- 别名(alias)是一个字段或值的替换名
- 别名用AS关键字赋予
- 有时别名也称为导出列(derived column)
我们使用关键字AS来赋予一个新计算列一个别名。
还是以学生信息的例子:
mysql> SELECT Concat(stu_name, ' (', stu_city, ')') AS stu_information
FROM stu_tbl
ORDER BY stu_id;
+-----------------+
| stu_information |
+-----------------+
| 刘一 (北京) |
| 陈二 (上海) |
| 张三 (广州) |
| 李四 (深圳) |
| 王五 (天津) |
| 赵六 (成都) |
| 孙七 (杭州) |
| 周八 (苏州) |
| 吴九 (重庆) |
| 郑十 (武汉) |
+-----------------+
10 rows in set (0.00 sec)
可以看到,在上述语句中:
AS stu_information子句用于指示SQL创建一个名为stu_information的计算字段。- 并且从输出来看,结果与之前的相同,只不过列名变为
stu_information,因此任何客户机应用都可以按名引用这个列。
2.4、执行算术计算
前面讲过,计算字段的另一个用途就是对检索出的数据进行算术计算。
在MySQL中,可以使用最基本的算术操作符,即加减乘除(+、-、*、/),另外,我们还可以使用圆括号来区分优先顺序。
举一个例子,比如现在有一个订单表,如下所示:
【图一】
这个时候要汇总每本书的总价格(单价乘以订购数量),就可以在输出的时候再显示一个计算字段(expanded_price)
【图二】
可以看到,输出中的计算字段为quantity*unitPrice,并且起了一个别名,即expanded_price。此时客户机应用就可以使用该新计算列。
2.5、SELECT
select 语句虽然经常被用来从表中检索数据,但如果省略了FROM子句,则可以简单的访问和处理表达式,举例如下:
- 处理算术表达式
20*18:
mysql> SELECT 20*18;
+-------+
| 20*18 |
+-------+
| 360 |
+-------+
1 row in set (0.00 sec)
- 使用
now()函数:
mysql> SELECT now();
+---------------------+
| now() |
+---------------------+
| 2023-01-01 01:01:01 |
+---------------------+
1 row in set (0.00 sec)
三、后话
好了,今天的文章内容就到这里,感谢观看。