第九章 用正则表达式进行搜索
这一章主要讲得是正则相关的知识,我个人认为把正则当成一门单独的技术进行学习会比较好,所以建议可以专门去学习
第十章 使用计算字段
某些场景下,存储在的表中的数据不是我们所需要的,我们需要对它进行转换、计算或格式化过,这就是计算字段的用途。
使用Concat()函数对字段进行拼接
多数DBMS使用+或||来实现拼接, MySQL则使用Concat()函数来对字段进行拼接。Concat()可以将多个字符串拼接成一个,如下图所示:
使用Trim()函数来去除空格
Trim()函数 :去除字符串左右两边的空格 LTrim()函数 :去除字符串左边的空格 RTrim()函数 :去除字符串右边的空格 下面是使用RTrim()函数的例子
使用别名
我们使用Concat()函数拼接出来的字段是没有名字的,可以使用AS关键字给它赋予一个名字,当然当已有的字段包含不符合规定的字符时,也可以AS关键字给一个已有字段起别名。
执行算术计算
除了使用Concat()函数得到一个计算字符,也可以使用+,-,,/计算得到一个字段。如图所示:
expanded_price列为一个计算字段,是由 quantity*item_price计算得到的。
第十一章 使用数据处理函数
除了使用SQL语句对数据进行处理,还可以使用一些函数对数据进行处理,需要注意的是,函数没有SQL的可移植性那么强。
文本处理函数
使用案例: 这是使用Upper()函数将文本处理成大写的案例
上面这些常见函数大家可能都能够理解,只有Soundex()不太常见,SOUNDEX是一个将任何文 本串转换为描述其语音表示的字母数字模式的算法。 如上图所示,假设有一个顾客的cust_contact值为Y.Lee,但是我们不知道Y.Lee,只知道这个顾客的名字的发音近似于Y.Lie,这个时候我们可以使用Soundex()将cust_contact列值转换为它的SOUNDEX值,因为Y.Lee和 Y.Lie发音相似,所以它们的SOUNDEX值匹配,因此可以查询到这个顾客。
常用日期和时间处理函数
举例,使用Date函数提取日期部分:
数值处理函数
第十二章 汇总数据
在日常开发中,我们除了获得检索得到的数据,还可以使用聚合函数对数据汇总,得到处理后的结果。
SQL聚合函数
AVG()函数
AVG()是计算特定列的平均值,会忽略掉值为NULL的列。 AVG()函数也可以搭配DISTINCT关键字使用,将重复的数据去重后,然后计算平均值,如下图所示: 在使用了DISTINCT后,此例子中的avg_price比较高,因为有多个物品具有相同的较低价格。排除它们提升了平均价格。
COUNT()函数
两种用法: 1.使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。 2.使用COUNT(column)对特定列中具有值的行进行计数,会忽略 NULL值。
第十三章 分组数据
这一章主要讲了如果使用GROUP BY 对数据进行分组。
创建分组
过滤分组
如果要对分组进行过滤,我们可以使用WHERE语句对表中数据进行过滤后,然后使用GROUP BY进行分组,也可以在使用GROUP BY进行分组后,再使用HAVING语句过滤掉一些分组。 例如: | id | value | | ---- | ----- | | 1 | 100 | | 2 | 150 | | 3 | 200 | | 3 | 500 | 对于上面这个表的数据,如果我们想要过滤掉id为3的分组,那么可以写成使用WHERE语句的方式:
SELECT id,COUNT(*) FROM table WHERE id != 3 GROUP BY id;点击复制代码复制出错复制成功
也可以写成使用HAVING语句的方式:
SELECT id,COUNT(*) FROM table GROUP BY id HAVING id !=3;点击复制代码复制出错复制成功
当然在过滤分组这方面,HAVING要比WHERE更加强大,比如我们想要对数据分组,并且得到数量大于2的组,那么WHERE就无法实现,只能用HAVING语句。如下:
分组和排序
使用GROUP BY在对数据进行分组后,输出的组的顺序通常是按从小到到大,从A到Z升序输出的,但是SQL规范并没有对此进行明确要求,所以有可能不是顺序的,可以使用ORDER BY来对分组进行升序或者降序排序。
SELECT子句顺序
在使用这些语句时,它们的先后顺序应该要按下面的表中顺序来写
第十四章 使用子查询
子查询作为WHERE子句的条件
有时候一条SELECT语句无法满足我们的需求,我们可以把一条SELECT语句的结果用于另外一条SELECT语句的WHERE子句,来实现复杂查询。
例如:我们想要获取订购物品TNT2的所有客户的名字和联系方式: 可以按照下图中的复杂查询实现:
(1) 查询包含物品TNT2的所有订单的编号。 (2) 根据订单编号查询所有客户的ID。 (3) 根据客户的ID查询名字和联系方式。
在WHERE子句中使用子查询能够编写出功能很强并且很灵活的 SQL语句。对于能嵌套的子查询的数目没有限制,不过在实际使用时由于 性能的限制,不能嵌套太多的子查询。
需要的注意的地方:
1.能嵌套的子查询的数目没有限制,不过在实际使用时由于 性能的限制,不能嵌套太多的子查询。
2.列必须匹配,在WHERE子句中使用子查询,应该保证SELECT语句具有与WHERE子句中相同数目的列。通常,子查询将返回单个列并且与单个列匹配,但如果需要也可以使用多个列。
3.子查询一般与IN操作符结合使用,但也可以用于测试等于(=)、 不等于(<>)等。
子查询结果作为计算字段
例如:我们想要在获取顾客的信息的同时,获取客户的订单数,可以使用子查询来实现,如下图所示: 当然这个需求也可以使用JOIN来实现