7/7 SELECT语句:创建计算字段

本文介绍了如何在SQL查询中创建计算字段,包括拼接字段、使用别名、执行算术计算和删除多余空格等操作。通过这些技巧,可以将数据库中不同列的数据组合、格式化或计算成应用程序需要的格式,而无需在客户端再次处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算字段:
存储在数据库表中的数据一般不是应用程序所需要的格式。比如:

  1. 如果想在一个字段中既显示公司名,又显示公司的地址,但这两个信息一般包含在不同的表列中;
  2. 城市、州和邮政编码存储在不同的列中(应该这样),但邮件标签打印程序却需要把它们作为一个恰当格式的字段检索出来;
  3. 列数据是大小写混合的,但报表程序需要把所有数据按大写表示出来;
  4. 物品订单表存储物品的价格和数量,但不需要存储每个物品的总价格(用价格乘以数量即可)。为打印发票,需要物品的总价格;
  5. 需要根据表数据进行总数、平均数计算或其他计算。

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

计算字段并不实际存在于数据库表中,计算字段是运行时在SELECT语句内创建的。
只有数据库知道SELECT语句中哪些列是实际的表列,哪些列是计算字段。从客户机(如应用程序)的角度来看,计算字段的数据是以与其他列的数据相同的方式返回的。

序号说明操作
1拼接字段Concat()函数
2使用别名AS关键字,顺序:ASFROMWHEREORDER BYLIMIT
3执行算术计算+-*/
4删除多余空格Trim()RTrim()LTrim()

以下为数据库SQLTEST中的三张表,其结构和内容如下:
在这里插入图片描述

1. 拼接字段

拼接(concatenate):将值联结到一起构成单个值。
MySQL的不同之处:多数DBMS使用+||来实现拼接,MySQL则使用Concat()函数来实现。所以当把SQL语句转换成MySQL语句时一定要把这个区别铭记在心。

mysql> SELECT Concat(Stu_Name, '(', Class_id, ')')
    -> FROM t_stu_profile
    -> ORDER BY Class_id;
+--------------------------------------+
| Concat(Stu_Name, '(', Class_id, ')') |
+--------------------------------------+
| 郭东(0611)                           |
| 钱南(0611)                           |
| .test(0611)                          |
| 李西(0612)                           |
| test(0612)                           |
| 张北(0613)                           |
| 王五(0614)                           |
| 赵七(0615)                           |
+--------------------------------------+

2. 使用别名

SQL支持列别名。别名(alias)是一个字段或值得替换名,别名用AS关键字赋予;
顺序:ASFROMWHEREORDER BYLIMIT

mysql> DELETE
    -> FROM t_stu_profile
    -> WHERE Stu_Name REGEXP 'test$';
mysql> INSERT t_stu_profile
    -> VALUES
    -> (7, '  test', 'F', 15, '0615'),
    -> (8, 'test  ', 'M', 18, '0612 ');
mysql> SELECT Concat(LTrim(Stu_Name), '[', RTrim(Class_id), ']')
    -> AS new_stu_profile
    -> FROM t_stu_profile
    -> ORDER BY Class_id DESC;
+-----------------+
| new_stu_profile |
+-----------------+
| 赵七[0615]      |
| test[0615]      |
| 王五[0614]      |
| 张北[0613]      |
| test  [0612]    |
| 李西[0612]      |
| 郭东[0611]      |
| 钱南[0611]      |
+-----------------+

3. 执行算术计算

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

# 创建新表:orderitems
mysql> CREATE TABLE IF NOT EXISTS orderitems
    -> (prd_id TINYINT, quantity INT, item_price FLOAT);
mysql> INSERT orderitems
    -> VALUES
    -> (1, 10, 5.99),
    -> (2, 3, 9.99),
    -> (3, 5, 10.00),
    -> (4, 1, 10.00);

新添加一列expanded_price,用来计算总价(quantity*item_price)。

mysql> SELECT prd_id,
    -> quantity,
    -> item_price,
    -> quantity*item_price AS expanded_price
    -> FROM orderitems;
+--------+----------+------------+--------------------+
| prd_id | quantity | item_price | expanded_price     |
+--------+----------+------------+--------------------+
|      1 |       10 |       5.99 |  59.89999771118164 |
|      2 |        3 |       9.99 | 29.969999313354492 |
|      3 |        5 |         10 |                 50 |
|      4 |        1 |         10 |                 10 |
+--------+----------+------------+--------------------+

4. 删除多余空格

Trim()函数可去掉串左右两边的空格;RTrim()函数可去掉值右边的空格;LTrim()函数可去掉值左边的空格。

mysql> SELECT Concat(LTrim(Stu_Name), '[', RTrim(Class_id), ']')
    -> FROM t_stu_profile
    -> ORDER BY Class_id DESC;
+----------------------------------------------------+
| Concat(LTrim(Stu_Name), '[', RTrim(Class_id), ']') |
+----------------------------------------------------+
| 赵七[0615]                                         |
| test[0615]                                         |
| 王五[0614]                                         |
| 张北[0613]                                         |
| test  [0612]                                       |
| 李西[0612]                                         |
| 郭东[0611]                                         |
| 钱南[0611]                                         |
+----------------------------------------------------+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值