学习目标:
- 计算字段
- 拼接字段
- 执行算术计算
一.计算字段
存储在数据库表中的数据一般不是应用程序所需要的格式。下面举几个例子。
- 如果想在一个字段中既显示公司名,又显示公司的地址,但这两个信息一般包含在不同的表列中。
- 城市、州和邮政编码存储在不同的列中(应该这样),但邮件标签打印程序却需要把它们作为一个恰当格式的字段检索出来。
- 列数据是大小写混合的,但报表程序需要把所有数据按大写表示出来。
- 物品订单表存储物品的价格和数量,但不需要存储每个物品的总价格(用价格乘以数量即可)。为打印发票,需要物品的总价格。
- 需要根据表数据进行总数、平均数计算或其他计算。
在上述每个例子中,存储在表中的数据都不是应用程序所需要的。我们需要直接从数据库中检索出转换、计算或格式化过的数据;而不是检索出数据,然后再在客户机应用程序或报告程序中重新格式化。这就是计算字段发挥作用的所在了。 计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的。
字段(field) 重要的是要注意到,只有数据库知道SELECT语句中哪些列是实际的表列,哪些列是计算字段。从客户机(如应用程序)的角度来看,计算字段的数据是以与其他列的数据相同的方式返回的。
SQL语句内完成的许多转换和格式化工作,在数据库服务器上完成这些操作比在客户机中完成要快得多,因为DBMS是设计来快速有效地完成这种处理的 。
二.拼接字段
1.需求:名字中按照name(location)这样的格式列出供应商的位置。
vendors表包含供应商名和位置信息。
拼接(concatenate) 将值联结到一起构成单个值。 在MySQL的SELECT语句中,可使用Concat()函数来拼接两个列。 MySQL的不同之处 多数DBMS使用+或||来实现拼接,MySQL则使用Concat()函数来实现。 当把SQL语句转换成MySQL语句时一定要把这个区别铭记在心。
select concat(vend_name,' (',vend_country,')') from vendors
order by vend_name; 格式:select concat(列名1,'(',列名2,')') from 表名 where order by 列名1;
Concat()拼接串,即把多个串连接起来形成一个较长的串。Concat()需要一个或多个指定的串,各个串之间用逗号分隔。 上面的SELECT语句连接以下4个元素: 1.存储在vend_name列中的名字; 2.包含一个空格和一个左圆括号的串; 3.存储在vend_country列中的国家; 4.包含一个右圆括号的串
2.需求:删除数据右侧多余的空格来整理数据
select concat(rtrim(vend_name),' (',rtrim(vend_country),')') from vendors
order by vend_name; 格式:select concat(rtrim(列名1),'(',rtrim(列名2),')') from 表名 where order by 列名1;
RTrim()函数去掉值右边的所有空格。通过使用RTrim(),各个列都进行了整理 。
3.Trim函数 :
- RTrim():去掉串右边的空格
- LTrim():去掉串左边的空格
- Trim():去掉串左右两边的空格
4.别名:
别名( alias) 是一个字段或值的替换名。别名用AS关键字赋予。
select concat(rtrim(vend_name),' (',rtrim(vend_state),')') as name_state from vendors order by vend_name; 注意:CONCAT()函数,拼接参数中存在NULL直接返回NULL 别名:就像它是一个实际的表列一样。
5.concat不返回null值做法:
a.SELECT CONCAT('1,',NULL,'2') result;
发现:concat中,只要有null值,则直接返回null值。
b.SELECT CONCAT('1,',IFNULL(NULL,' '),'2') result;
不返回null值:CONCAT('1,',IFNULL(NULL,' '),'2')
c.select concat(rtrim(vend_name),' ---( ',ifnull(rtrim(vend_state),'==='),')') as name_state from vendors
order by vend_name;
d.CONCAT_WS(分隔符,参数1,参数2,...参数n)
CONCAT_WS():表示concat with separator,即有分隔符的字符串连接 CONCAT_WS()函数在执行的时候,不会因为NULL值而返回NULL SELECT CONCAT_WS(';','1',NULL,'3333','2') result;
e.select concat_ws('-',rtrim(vend_name),' (',rtrim(vend_state),')') as name_state from vendors
order by vend_name;
三.执行算术运算
汇总物品的价格(单价乘以订购数量):
select prod_id,quantity*item_price as sum_price from orderitems where order_num like '2000_' order by sum_price;
如何测试计算: SELECT提供了测试计算和试验函数 虽然SELECT通常用来从表中检索数据,但可以省略FROM子句以便简单地访问和处理表达式。 例如: SELECT 3*2
SELECT Trim('abc');
SELECT Now() 返回当前日期和时间
四.总结
学习了
- 从数据库中直接检索,转换,格式化处理,在返回客户端
- 计算字段在数据库服务器上完成
- 拼接字段concat
- concat_ws
- ltrim(左侧) 、rtrim(右侧)、trim(左右侧)
- as
- 算术操作符,+-*/
- 测试计算
多思考,多总结,多输出,一键四连~
但行好事,莫问前程,我们下篇见~
9.《用正则表达式进行搜索》:https://blog.51cto.com/SuperBigData/5466582
8.《用通配符进行过滤》:https://blog.51cto.com/SuperBigData/5458893
7.《数据过滤》:https://blog.51cto.com/SuperBigData/5457563
6.《过滤数据》:https://blog.51cto.com/SuperBigData/5456902
5.《排序检索数据》:https://blog.51cto.com/SuperBigData/5451534
4.《检索数据》:https://blog.51cto.com/SuperBigData/5449032
3.《使用MySQL》:https://blog.51cto.com/SuperBigData/5437954
2.《MySQL简介》:https://blog.51cto.com/SuperBigData/5436719
1.《了解MYSQL》:https://blog.51cto.com/SuperBigData/5434475