Mysql第十章 - 计算字段
存储在数据库表中的数据一般不是应用程序所需要的格式。
下面举几个例子
- 如果想在一个字段中即显示公司名,有显示公司的地址,但这个信息一般包含在不同的列中。
- 城市,州和邮寄编码存储在不同的列中,但邮寄标签打印程序却需要将它们作为一个恰当格式字段表示出来
- 列数据是大小写混合的,但报表程序需要把所有数据按照大写表示出来
- 物品订单表存储物品的价格和数量,但不需要存储每个物品的总价格。为打印发票,需要物品的总价格
- 需要根据表数据进行总数,平均计算或其他计算
字段(filed)
定义:“字段”基本上与列(column)的意思相同,经常互换使用,不过数据库列一般称为“列”,而术语字段通常用在计算字段连接上
客户机与服务器的格式 :
可在SQL语句内完成的许多转换和格式化工作都可以直接在客户机应用程序内完成。但一般来说,在数据库服务器上完成这些操作比在客户机中完成要快得多,因为DBMS是设计来快速有效地完成这种处理的。
CONCAT :拼接(concatenate) 将值联结到一起构成单个值
在MySQL的SELECT语句中,可使用Concat()函数来拼接两个列。
MYsql的不同点:多数DBMS使用+或||来实现拼接,MySQL则使用Concat()函数来实现。当把SQL语句转换成MySQL语句时一定要把这个区别铭记在心
举例:
输入:
select CONCAT(p.person_name,'(',p.biz_code ,')') FROM pi_trades.patient p
输出:
基础.png
分析:
Concat()拼接串,即把多个串连接起来形成一个较长的串,Concat()需要一个或多个指定的串,各个串之间用逗号分隔。
Trim函数()函数
定义:
- RTrim()函数:去掉值右边的所有空格。
- LTrim()函数:支持左边的所有空格。
- Trim()函数:去掉左右两边的空格。
举例:
--- 基础查询
select CONCAT(p.person_name,'(',p.biz_code ,')') FROM pi_trades.patient p
WHERE p.person_name like'%郝忠平%'
--- 去除患者姓名右边的空格
select CONCAT(RTRIM(p.person_name),'(',p.biz_code ,')') FROM pi_trades.patient p
WHERE p.person_name like'%郝忠平%'
--- 去掉患者姓名左边的空格
select CONCAT(LTRIM(p.person_name),'(',p.biz_code ,')') FROM pi_trades.patient p
WHERE p.person_name like'%郝忠平%'
别名(alias)
定义:SQL支持列别名。别名(alias)是一个字段或值的替换名。别名用AS关键字赋予
输入:
select CONCAT(LTRIM(p.person_name) ,'(',p.biz_code ,')') AS 患者姓名 FROM pi_trades.patient p
WHERE p.person_name like'%郝忠平%'
输出:
image.png
分析:
SELECT语句本身与以前使用的相同,只不过这里的语句中计算字段之后跟了文本“患者姓名”。它指示SQL创建一个包含指定计算的名为“患者姓名”的计算字段。
执行算术计算
计算字段的另一个常见用途是对检索出数据进行算术计算,
举例:
orders表包含收到的所有订单,orderitems表包含每个订单中的各项物品。
输入:检索订单号20005中的所有物品
select prod_id,quantity,item_price from orderitems where order_num=20005
输出:
image.png
item_price列包含订单中每项物品的单价。如下汇总物品的价格(单价乘以订购数量):
输入:
select prod_id,quantity,item_price ,quantityitem_price AS expanded_price from orderitems where order_num=20005
分析:
输出中显示的expanded_price列为一个计算字段,此计算为quantityitem_price。客户机应用现在可以使用这个新计算列,就像使用其他列一样