数据库就是专门处理处理数据、与数据打交道的一个工具。数据中的数据不仅只有数值型的数据、还有文本型数据、日期型的数据、等等还有其他类型的数据。

今天我们就来说说如何对SQL中数据做一下简单的处理。这节课包含以下内容:计算字段处理数据、函数处理数据、如何对数据进行分组以及如何对数据进行汇总。下面我们就开始吧!world表(本教程使用的表)

一、计算字段处理数据

(1)计算字段是什么?对于计算字段,我个人的理解是:根据实际工作的需要,我们将SQL中列数据进行相应处理(运算、拼接),得到我们想要的字段。这里的字段,可以理解为SQL中的列,但是它并不实际存在,而是我们创建的。

(2)如何创建计算字段?计算字段一般通过SELECT语句的方法创建的。比如下面这段代码:

上面world表中,我们如何获得每个国家的人均GDP呢?

SELECT name,gdp/population

FROM world

结果:

通过上面的代码,我们就创建一个人均GDP的计算字段(gdp/population)

(3)计算字段常用类型

1、拼接字段:在实际工作中,我们需要将2个字段拼接在一起。比如,有这样一个表:客户名称、客户地址两列。在检索数据时,需要将这两列数据同时检索出来,那么拼接字段的用处就显现出来了。

需要拼接字段,不同的数据库有不同的操作符。Oracle 和 DB2 使用"||"进行拼接,而Access和SQL Serve 使用“+”进行拼接,而MySql 和MariaDB使用“Concat”函数进行拼接。这里我们使用MySql进行举例,其他的拼接方式,有兴趣的小伙伴,可以自己试试。

SELECT name,CONCAT(name," ",continent)

FROM world这里将国家名和所在洲用一个“空格”符号联结起来。

结果:

2、使用“别名”。如上面那段代码,使用SELECT语句用CONCAT操作符创建一个计算字段,如果只是看一下结果,这没有什么问题,但是如果要在数据库客户端调用这个创建的计算字段,那就没有办法了。

这时我们可以在创建计算字段时,使用AS语句为计算字段创建一个别名。比如下面这段代码:

SELECT name,CONCAT(name," ",continent) AS detail

FROM world

结果:

上面这段代码用“国家名”+“洲名”创建了一个名为“detail”的别名。

3、计算字段。计算字段是指SQL中检索出的数据进行数学运算而创建的字段。比如我们想知道每个国家人均GDP是多少?这个时候,计算字段就派上用场了。

SELECT name, gdp/population AS gdp_person

FROM world

结果:

上面的字段“gdp_person”就是通过使用算术运算创建的“人均GDP”.

SQL中能进行的算术运算符包括:+(加)、-(减)、*(乘)、/(除)

二、函数处理数据

在介绍使用函数处理数据前,我们先介绍一下使用函数可能出现的问题。我们这里主要介绍4种函数:文本函数、日期函数、数值处理函数。前两种函数,各种主流的数据库实现方式存在很大差异,这就导致在使用函数处理数据时,SQL语句的可移植性非常差。这点大家一定要谨记。

(一)文本函数:这里我们介绍几种常用的文本处理函数:

LEFT(string,n)--返回字符串左边一定长度n的字符

RIGHT(string,n)--返回字符串右边一定长度n的字符

LENGTH(string)--返回字符长的长度

LOWER(string)--将字符串转为小写

UPPER(string)--将字符串转为大写

LTRIM(string)--去掉字符串左边的空格

RTRIM(string)--去掉字符串右边的空格

TRIM(string)--去掉字符串所有的空格

SOUNDEX(string)--将字符串转化为其发音的一种算法

SELECT cust_name,cust_contact

FROM customers

WHERE SOUNDEX(cust_name) = soundex(‘Manuli’);上例中将“cust_name”的发音与“Manuli”进行比较。

上面的函数都比较简单,这里我就不一一举例,有兴趣的小伙伴们可以自己试试看哦!

(二)日期处理函数

日期处理函数在SQL具有重要的地位,可遗憾的是,这些函数的可移植性是最差的。

下面我列举一些在MySql中常用的函数:获得当前日期+时间(date + time)函数:NOW()

SELECT NOW()

结果:获得当前日期(date)函数:CURDATE()

SELECT CURDATE()

结果:获得当前时间(time)函数:CURTIME()

SELECT CURTIME()

结果:

这里我们只列举这几个日期函数,需要了解更多函数的小伙伴们,可以自己查看MySql的专业资料,这里就不一一列举了。

(三)数值处理函数

数值处理函数是所有数据库最统一、一致的函数。常见的函数有以下几个:ABS--返回绝对值

PI--返回圆周率

SQRT--返回一个数的平方根

COS--返回余弦

SIN--返回正弦

以上是几个常见的数值处理函数,有兴趣的小伙伴可以查询其他专业资料。

三、数据汇总

在工作中,我们不是总是需要将数据检索出来,我需要数据的汇总情况。比如,我们想知道一个总共有多少个客户在购买?再比如,我们想知道产品的平均售价是多少?对这些数据的处理,就需要SQL中的聚集函数。

(一)聚集函数:处理汇总数据信息的函数。

在SQL中,总共有5个聚集函数:AVG、COUNT、MAX、MIN、SUM。这些函数和上面提及的文本函数、时间函数、数值处理函数一样,在使用时可以使用AS语句创建别名。下面我们分别来介绍一下:

1、AVG函数

AVG函数可以返回该列或行的平均值。比如,下面这段代码:计算全球所有国家的平均GDP情况。

SELECT AVG(gdp) AS gdp_avg

FROM world

结果:

AVG函数使用注意事项:

☞AVG函数只能作用于单个列,并且列名必须作为函数参数。

☞AVG函数忽略列中值为NULL的行。

2、COUNT函数COUNT函数有两种使用方式:

COUNT(*)--对表中的所有行进行计数,不论其值是否为空值(NULL)。

COUNT(列名)--对特定的进行计数,且忽略其中值为空值的行。

比如,我们想知道地球上到底有几个国家??

SELECT COUNT(name) AS country_num

FROM world

结果:

3、MAX函数

MAX返回指定列中的最大值。比如,我们想知道人口最多国家人口有多少?GDP最高的值是多少?

SELECT MAX(population) AS pop_max, MAX(gdp) AS gdp_max

FROM world

结果:MAX用于非数值数据,将返回该列数据中最后一行数据。

4、MIN函数

MIN返回指定列中的最小值。比如,我们想知道人口最少的国家人口有多少?GDP最低的值是多少?

SELECT MIN(population) AS pop_min, MIN(gdp) AS gdp_min

FROM world

结果:MIN用于非数值数据,将返回该列数据中第一行的数据。

5、SUM函数

SUM返回指定列值的和。比如,我们想知道:全世界的总人口是多少?

SELECT SUM(population) AS pop_sum

FROM world

结果:SUM函数忽略列中数值为空值的行。

(二)聚集不同值

要对不同的值进行聚集,则必须指定DISTINCT参数。使用DISTINCT有几点需要注意:

1、DISTINCT不能使用COUNT(*),只能使用于COUNT。

2、DISTINCT使用于MAX、MIN用处不大。

四、数据分组

上一小节中,我们学习了如何使用聚集函数进行数据汇总。但在实际应用中,可能会遇到这样情况,我想要知道每个客户购买量?或者,我们想要知道每一个洲人口是多少?这就需要让“数据分组”大显身手了。

(一)创建分组

数据分组是用SELECT语句中GROUP BY语句创建的。比如,我们想知道每个洲的人口是多少?

SELECT continent,SUM(population) AS pop_sum

FROM world

GROUP BY continent

结果:使用GROUP BY语句注意事项:

■GROUP BY可以包含任意数目的列,也就是说GROUP BY可以嵌套。

■GROUP BY语句中列出的每一列都必须是检索列或有效表达式。

■除聚集计算语句外,SELECT中出现的列,都必须在GROUP BY中给出。

■GROUP BY语句必须在WHERE语句之后,ORDER BY语句之前。

(二)分组过滤

在SQL中,对每一行过滤使用WHERE语句,而对分组进行过滤,则使用HAVING语句。比如,我们想知道人口在1亿以上的洲有哪些?

SELECT continent,SUM(population) AS pop_sum

FROM world

GROUP BY continent

HAVING pop_sum > 100000000

结果:

比如,我们想知道:国家人口大于1千万,洲人口大于1亿的人口有多少?

SELECT continent,SUM(population) AS pop_sum

FROM world

WHERE population > 10000000

GROUP BY continent

HAVING pop_sum > 100000000

结果:

这里我们既使用了WHERE语句,对每个国家的人口进行了过滤,又使用了HAVING语句,对整个大洲的人口也进行了过滤。从上面的语句中,可以看出数据的差异。

从上面的的例子,我们可以这样理解WHERE和HAVING语句:WHERE是用于分组前的过滤,而HAVING是用于分组后的过滤。

(三)分组的排序

虽然使用GROUP BY语句得到的结果,可能和使用ORDER BY语句得到顺序一样,但是如果需要对结果进行排序,必须使用ORDER BY语句,而不能依靠GROUP BY语句。这是保证正确排序的唯一方法。

总结:对数据进行处理的方式有:计算字段、函数、汇总数据(5个聚集函数)、数据分组。

以上就是本人对SQL中数据处理的一些总结,如有不对之处,欢迎各位小伙伴们指正!!如果这篇文章对您有所帮助,麻烦您点个赞呗!!!