《MYSQL必知必会》读书笔记(下)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 《基础》

第九章 用正则表达式进行搜索

这一章主要讲得是正则相关的知识,我个人认为把正则当成一门单独的技术进行学习会比较好,所以建议可以专门去学习

第十章 使用计算字段

某些场景下,存储在的表中的数据不是我们所需要的,我们需要对它进行转换、计算或格式化过,这就是计算字段的用途。

使用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来实现

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
SQL 关系型数据库 MySQL
MySQL必知必会—读书笔记
MySQL必知必会—读书笔记
|
存储 监控 关系型数据库
【读书笔记】Mysql | 一图了解Mysql全貌
这段时间学习Mysql的笔记,对Mysql有个深入的了解。
|
存储 缓存 关系型数据库
《高性能Mysql》读书笔记之Schema与数据类型优化
《高性能Mysql》读书笔记之Schema与数据类型优化
|
存储 关系型数据库 MySQL
|
关系型数据库 MySQL 数据库
|
SQL 关系型数据库 MySQL
|
SQL 关系型数据库 MySQL
|
SQL 存储 安全
mysql必知必会读书笔记
mysql必知必会读书笔记
mysql必知必会读书笔记

推荐镜像

更多