概念
介绍计算字段之前,先了解三个概念:
- 字段
- 计算字段
- 数据库列
字段
什么是字段?字段是“列”在具体某一行的值,是逻辑上的数据单元
字段的特点正如其概念,表示某一行中某一列的具体数据,比如A教师的工号是T001,那么T001就是一个字段值。是的,字段是一个具体的值
计算字段
计算字段实际上是不存储数据的虚拟列,是通过表达式动态计算生成的虚拟列
计算字段有以下特点:
- 在查询的过程中实时计算,结果只存在查询结果中
- 经常用于简化复杂逻辑或者动态生成数据
比如下边的sql(先举例子,后边会介绍到):
-- 计算总价(price * quantity)
SELECT id, price, quantity, price * quantity AS total_price -- 计算字段
FROM products;
上边出现了一个计算字段:total_price,总价,其值等于价格乘以数量,在实际的数据库表中,并不存在总价这一列,但是生成的结果中会展示这一列
数据库列
在最开始介绍mysql的时候,我们已经知道数据库列就是一张表的垂直结构单元,类比Excel中的列,是用来存储特定类型数据的(创建表的时候要制定列的数据类型)
所以数据库列的特点就是实际存储在磁盘中,是物理存在的数据,比如上边例子中的quantity和price
明确了三者的关系,我们就开始具体的学习吧!
拼接字段
在实际的工作中,加入我们要存地址信息,往往不会在一列中存储“xx省xx市xx区,邮政编码xxxx”
一般会把省份、城市、邮政编码分成三个列分别存储,但是站在用户角度来看,想要查询一个地址信息,肯定希望我们把完整的信息返回给他,这个时候我们就要把三个字段拼接起来
我们同样用教师表来举例子,假设教师表的信息如下:
我们需要获取教师的地址信息,但是要求是包含省市以及邮政编码的完整信息,并且把邮政编码用括号括起来放在省市后边,可以这样组装sql语句:
select Concat(province, city, ' (', postal_code, ') ') from teachers order by teacher_id;
结果符合需求
上边我们使用了前边没出现过的Concat()
函数来实现了拼接,如果用其他DBMS,也有可能使用+
或者||
实现拼接,效果是一样的,可以看到concat函数的参数不仅可以是字段,也可以是我们自己定义的字符串,比如上边sql中的两个括号,就是我们根据需求,自己加上去的
当然,Conacat函数实现拼接的顺序是根据参数位置从左到右依次拼接的
去除空格处理
在mysql中,还有几个函数可以帮助我们做一些简单的数据处理,比如去除数据的空格,包括去除数值右边的空格, 数值左边的空格以及同时去除左右两边的空格,分别使用的是以下三个函数:
Rtrim()
:去除右侧空格Ltrim()
:去除左侧空格Trim()
:去除两侧空格
我们以Rtrim()
为例,假如教师填写名字时在结尾多打了空格,我们查出来的数据不希望包含空格,同时返回结果为教师姓名+教师完整地址信息,就可以这样查询:
select Concat(Rtrim(teacher_name), '地址信息:', province, city, postal_code, ') from teachers;
我们不使用Rtrim函数查询做个对比:
select Concat(teacher_name, '地址信息:', province, city, postal_code, ') ') from teachers;
给计算字段起别名:as
前边几个sql我们使用了拼接,但是在查询结果中,展示出来的“列名”都是一长串的拼接信息,以查询教师完整信息为例,假如我们就想让查询结果中展示的名称是“教师完整信息”,就可以使用as
给其起一个别名:
select Concat(Rtrim(teacher_name), '地址信息:', province, city, postal_code, ') ') from teachers;
算数计算
假如学生信息表里边存储了学生们的各科考试成绩,我们查询的时候除了展示成绩,还想要展示总分、平均分等信息,就需要使用数学运算了
假如我们的学生信息如下:
要求:查询所有学生的各科成绩及其总分和平均分
select student_name, math, en, gym, math+en+gym as total_score, (math+en+gym)/3 as average_score from students;
mysql中支持的运算符包括了基本的四则运算:
- 加(+)
- 减(-)
- 乘(*)
- 除(/)
以上就是关于基础入门的mysql计算字段相关的内容啦,下一期我们一起学习数据的汇总,学习更多更加灵活的函数操作!