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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 《基础》

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

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

第十章 使用计算字段

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

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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
MySQL必知必会—读书笔记
MySQL必知必会—读书笔记
|
7月前
|
存储 缓存 关系型数据库
《高性能Mysql》读书笔记之Schema与数据类型优化
《高性能Mysql》读书笔记之Schema与数据类型优化
|
11月前
|
SQL 关系型数据库 MySQL
|
存储 关系型数据库 MySQL
|
关系型数据库 MySQL 数据库
|
SQL 关系型数据库 MySQL
|
SQL 关系型数据库 MySQL
|
SQL Oracle 关系型数据库
|
SQL 存储 安全
mysql必知必会读书笔记
mysql必知必会读书笔记
mysql必知必会读书笔记