跨过了正则表达式那一道槛,我感觉前途一片光明,虽然学习的只是关于正则表达式的很小很小一部分,但至少让我的头脑正确的接受了它。哈哈,废话不多说,继续学习~
第10章&第11章:创建计算字段&使用数据处理函数
我觉得这两章可以在放在一起。
以前对于数据库中的数据都是全部先提取出来,再通过程序语言进行处理。甚至都不知道几乎所有DBMS(数据库管理系统)都提供了对于数据的转制和格式化操作,毕竟DBMS是设计来快速有效的完成这些处理的,所以其效率是比较高的。先看一个例子:
SELECT user_id, Concat(user_name,'(',user_add,')') AS user_info
FROM test;
上面的例子中,使用了一个函数 Concat(),它的作用是将不同的字段拼接起来,像上面的返回结果是这样的形式
+----------------+-------------------------------------------------+
| user_id | user_info |
+----------------+-------------------------------------------------+
| 1 | Xiao Hong (Guangzhou) |
+----------------+-------------------------------------------------+
可以明显的看出多了一个user_info字段,这个字段是 Concat(user_name,'(',user_add,')') 产生结果的别名。别名用关键字AS赋予。这样我们就可以像平常的返回内容样调用user_info这个字段,而user_info的内容由Concat()函数拼接成了 Xiao Hong (Guangzhou) 这样的形式,让我们一次就可以拿到我们需要的信息。
MySQL除了可以调用函数,也可以进行算术计算。
下面的的语句返回user_id,并且返回一个user_num字段,其值是user_id*user_id。
SELECT user_id,user_id*user_id AS user_num
FROM test;
MySQL提供了常用的文本处理函数,日期和时间处理函数等等。
SELECT user_id,Length(Trim(user_add)) AS add_length
FROM test;
-- Trim()是去掉串两边的空格
-- Length()是返回串的长度
SELECT Year(Now()) AS year;
-- Now()返回当前的时期和时间
-- Year()返回时间字段中的年份
第12章:汇总数据
这一章的内容主要利用聚集函数对数据进行总体上的一些处理。
--------------------------------------------------------------------
函数 说明
--------------------------------------------------------------------
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列之和
--------------------------------------------------------------------
SELECT COUNT(*) AS add_count
FROM test;
COUNT(*)是统计出这个表的记录总数,不管列中的值是否为空,也可以使用COUNT(user_add),这样便可以过滤掉user_add为NULL的记录。
其它的函数使用方法类似。
SELECT SUM(user_id*user_id) AS user_num
FROM test;
第13章:分组数据
在使用上一章的汇总函数对信息处理之后并不总能返回我们需要的信息,我们不仅需要对数据进行汇总,我们也需要对数据进行分组。譬如我想知道在 test 表中来自己各个地方的人数是多少,这其中除了想汇总每个地方的人数外还得对每个不同的地方进行分组,这就是GROUP BY子句做的事情了。
上面的需求可以用以下搜索语句解决:
SELECT user_add,COUNT(*) AS add_count
FROM test
GROUP BY user_add;
如果我们不仅想返回各个分组的统计结果,而且还想要对每个分组的总数进行统计,可以使用
WITH ROLLUP 关键字
SELECT user_add,COUNT(*) AS add_count
FROM test
GROUP BY user_add WITH ROLLUP;
但是有时我们并不想返回所有的分组,我们只需要其中的几个分组,这个时候我们可以使用 HAVING关键字。HAVING和WHERE的用法基本类似,那就是都是对数据进行过滤,不同的是WHERE是在数据分组前进行过滤,只能过滤行,而HAVING是在数据分组后对分组进行过滤。
SELECT user_add,COUNT(*) AS add_count
FROM test
GROUP BY user_add
HAVING user_add IN ('guangzhou','shanghai');
-- 使用HAVING对分组进行过滤