《MYSQL必知必会》读书笔记

《MYSQL必知必会》读书笔记

挽枫 691 2022-09-24

前言

由于大学期间,没有好好的学习计算机专业课的通识课,导致现在到了公司很多sql语句看不懂,平时公司的大佬在讨论sql语句的时候我只能抓瞎了,于是乎赶紧翻起了积满灰尘的《MYSQL必知必会》这本书。利用国庆节一口气读完了这本书。阅读这本书带给我的感觉是,这个作者不去教书可惜了,非常感谢有这么优秀的中国人翻译出这么优秀的作品,谢谢!

第一章、了解SQL

image

第二\三章、了解和使用MYSQL

新手请看这里 https://weread.qq.com/web/reader/929321f0715c01b5929bd3fk8f132430178f14e45fce0f7

第四章、检索数据之SELECT语句

image-1665321192217
示例:

-- 检索单个列
select prod_name from products;
-- 检索多个列
select prod_id, prod_name from products;
-- 检索所有列
select * from products;
-- 检索不同的行
select distinct vend_id from products;
-- 检索结果返回不多于5行
select prod_name from products LIMIT 5;
-- 使用完全限定的表名
select products.prod_name from crashcourse.products;

第五章、排序检索数据

image-1665321262577
示例:

-- 按某列排序 通常并不是非得要用选择的列作为排序的依据,也可以用其他的列排序
select prod_name from products order by prod_name;
select prod_name from products order by prod_creat_time;
-- 按多列排序,首先按价格再按名称排序
select prod_name from products order by prod_price, prod_name;
-- 按降序排列 DESC关键字只应用到直接位于其前面的列名。
-- 在上例中,只对prod_price列指定DESC,对prod_name列不指定。
-- 因此,prod_price列以降序排序,而prod_name列(在每个价格内)仍然按标准的升序排序。
select prod_name from products order by prod_price desc, prod_name;

第六章、过滤数据

image-1665321333632
示例:

-- 使用where子句 返回价格等于2.50的产品名字和产品价格
select from prod_name, prod_price from products where prod_price = 2.50;

第七章、数据过滤

image-1665321415444
示例:

-- AND操作符 检索由供应商1003制造且价格小于等于10美元的所有产品的名称和价格
select prod_id, prod_price, prod_name from products where vend_id = 1003 and prod_price <=10;
-- OR操作符 检索由供应商1003或供应商1002
select prod_name, prod_price from products where vend_id = 1002 or vend_id = 1003;
-- 计算优先级
select prod_name, prod_price from products where (vend_id = 1002 or vend_id = 1003) and prod_price >=10;
-- IN操作符 以下两条语句等价
select prod_name, prod_price from products where vend_id in (1002,1003) order by prod_name;
select prod_name, prod_price from products where vend_id = 1002 or vend_id = 1003 order by prod_name;
-- NOT操作符 
select prod_name, prod_price from products where vend_id not in (1002,1003) order by prod_name;

为什么要使用IN操作符?其优点具体如下。

❑ 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
❑ 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
❑ IN操作符一般比OR操作符清单执行更快。
❑ IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句

第八章、用通配符进行过滤

image-1665321526009
示例:

-- %通配符 检索任意以jet起头的词。%告诉MySQL接受jet之后的任意字符,不管它有多少字符
select prod_id, prod_name from products where prod_name like 'jet%';
-- _下划线通配符
select prod_id, prod_name from products where prdo_name like '_ ton anvil';


下划线通配符与百分号通配符的区别

1、下划线通配符
image-1665321600016

2、%通配符
image-1665321613786

与%能匹配0个或多个字符不一样,_总是匹配一个字符,不能多也不能少

注意:

❑ 搜索模式 ‘%anvil%’ 表示匹配任何位置包含文本anvil的值,而不论它之前或之后出现什么字符。
❑ 搜索模式 ‘s%e’ 找出以s起头以e结尾的
❑ 虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。即使是WHERE prod_name LIKE '%’也不能匹配用值NULL作为产品名的行。
❑ 尾空格可能会干扰通配符匹配。例如,在保存词anvil时,如果它后面有一个或多个空格,则子句WHERE prod_name LIKE '%anvil’将不会匹配它们,因为在最后的l后有多余的字符。解决这个问题的一个简单的办法是在搜索模式最后附加一个%。一个更好的办法是使用函数去掉首尾空格。

第九章、用正则表达式检索

image-1665321711657
示例:

-- 基本字符匹配 检索列prod_name包含文本1000的所有行
select prod_name from products where prod_name regexp '1000' order by prod_name;

-- 进行or匹配 为搜索两个串之一(或者为这个串,或者为另一个串),使用|
select prod_name from products where prod_name regexp '1000|2000' order by prod_name;

-- 匹配几个字符之一 匹配以1或2开头的并且后面跟着Ton字符串的行
select prod_name from products where prod_name regexp '[12] Ton' order by prod_name;

-- 匹配范围 [x...-x...]
select prod_name from products where prod_name regexp '[12345] Ton' order by prod_name;
select prod_name from products where prod_name regexp '[1-5] Ton' order by prod_name;

-- 匹配特殊字符 转义\\ 如匹配. | []怎么做
select prod_name from products where prod_name regexp '\\.' order by prod_name;

-- 匹配字符类 匹配多个实例 定位符 略

第10章创建计算字段

image-1668867330810

示例:

-- vendors表包含供应商名和位置信息。假如要生成一个供应商报表,需要在供应商的名字中按照name(location)这样的格式列出供应商的位置。
SELECT Concat(vend_name, '(', vend_country, ')') FROM vendors ORDER BY vend_name;

-- 获取商品名称、商品销量和销售总额
SELECT prod_name, prod_total*prod_price AS total FROM products;

注意:

客户机与服务器的格式 可在SQL语句内完成的许多转换和格式化工作都可以直接在客户机应用程序内完成。但一般来说,在数据库服务器上完成这些操作比在客户机中完成要快得多,因为DBMS是设计来快速有效地完成这种处理的。

第11章使用数据处理函数

image-1668867448345

前言

与其他大多数计算机语言一样,SQL支持利用函数来处理数据。函数一般是在数据上执行的,它给数据的转换和处理提供了方便。本章将讲解mysql有哪些函数,以及如何使用这些函数

mysql支持的常用的数据处理函数

常用的文本处理函数
image-1668867502633

常用时间日期处理函数
image-1668867652555

常用数值处理函数
image-1668867675126

第12章汇总数据

前言

我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数。使用这些函数,MySQL查询可用于检索数据,以便分析和报表生成,这就是mysql的汇总数据功能。

实际的应用场景

  • 确定表中行数(或者满足某个条件或包含某个特定值的行数)。
  • 获得表中行组的和。
  • 找出表列(或所有行或某些特定的行)的最大值、最小值和平均值。

SQL聚集函数表
image-1668867757941

小结:

聚集函数用来汇总数据。MySQL支持一系列聚集函数,可以用多种方法使用它们以返回所需的结果。这些函数是高效设计的,它们返回结果一般比你在自己的客户机应用程序中计算要快得多。