Linux三剑客之grep简介 grep,sed和awk被称之为linux三剑客,后面两个在文章中都写过一些,今天先简单写写grep这个命令。...[root dba_mysql]# cat yeyz.sh|grep abcd abcdefg abcd 没有参数的时候,grep命令将yeyz.sh中包含abcd的行给过滤出来...包含abcd的行后面一行 [root dba_mysql]# cat yeyz.sh|grep -A1 abcd abcdefg abcd aaaaaaa 包含abcd的行后面两行...-x参数 只匹配完全相同的行,注意,空格不一致都不行!...[root dba_mysql]# cat yeyz.sh abcdefg abcd AbC aaaaaaa ddddddd 只匹配完全相同的列 [root
两者都使用带标签的行和列的表格数据。 Pandas的merge函数根据公共列中的值组合dataframe。SQL中的join可以执行相同的操作。...这些操作非常有用,特别是当我们在表的不同数据中具有共同的数据列(即数据点)时。 ? pandas的merge图解 我创建了两个简单的dataframe和表,通过示例来说明合并和连接。 ?...您可能已经注意到,id列并不完全相同。有些值只存在于一个dataframe中。我们将在示例中看到处理它们的方法。 示例1 第一个示例是基于id列中的共享值进行合并或连接。...Pandas的merge函数不会返回重复的列。另一方面,如果我们选择两个表中的所有列(“*”),则在SQL join中id列是重复的。...因此,purc中的列中填充了这些行的空值。 示例3 如果我们想要看到两个dataframe或表中的所有行,该怎么办?
()函数{avg()函数忽略列值为NULL的行}; 2、count()函数 count()函数进行计数,可利用count()确定表中行的数目或符合特定条件的行的数目; count()函数有两种使用方式:...*) as num_cust from customers; 这条SQL语句利用count(*)对customers表中所有行计数,计数值在num_cust中返回; select count(cust_email...,where子句保证只统计某个指定列的数值; PS:利用标准的算数操作符,所有聚集函数都可用来执行多个列上的计算(sum()函数忽略列值为null的行) 6、distinct与聚集函数 MySQL5.0.3...二、分组数据 1、group by创建分组 在MySQL中,分组是在select语句中的group by子句中建立的,比如: select vend-id,count(*) as num_prods from...)的那些分组; having和where的区别: where在数据分组前进行过滤,having在数据分组后进行过滤;where排除的行不包括在分组中(这可能会改变计算值,从而影响having子句中基于这些值过滤掉的分组
二、MySQL的JOIN实现原理 在MySQL 中,只有一种Join 算法,就是大名鼎鼎的Nested Loop Join,他没有其他很多数据库所提供的Hash Join,也没有Sort Merge Join...顾名思义,Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。...union查询:它可以把需要使用临时表的两条或更多的select查询合并的一个查询中(即把两次或多次查询结果合并起来。)。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。...要求:两次查询的列数必须一致(列的类型可以不一样,但推荐查询的每一列,相对应的类型要一样) 可以来自多张表的数据:多次sql语句取出的列名可以不一致,此时以第一个sql语句的列名为准。...如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么union会将相同的行合并,最终只保留一行。也可以这样理解,union会去掉重复的行。
(from子句)之后给出 select column from table where column = N; 该语句的意思为从table表中筛选出column=N的行;采用了最简单的相等测试,检查一个列是否具有指定的值据此进行过滤...= N; where子句中,对过滤的值,有的用单引号,有的不用,原因在于:单引号用于限定字符串,如果将值与串类型的列进行比较,则需要,如用来与数值列比较,则不用引号 3、范围值检查 select column...) is null子句就是用来检查表中具有null值的列(在过滤数据选择出不具有特定值的行时,一定要验证返回数据中确实给出了被过滤列具有null的行) 四、使用操作符过滤数据 操作符(operator)...and和or操作符;允许两者结合以进行复杂和高级的过滤(需要说明的是:and在计算次序中优先级高于or) 如果希望and和or之间计算次序不被错误组合,可将or操作符所对应的子句使用圆括号()括起来,以明确的分组相应的操作符...、通配符或两者组合构成的搜索条件 为在搜索子句中使用通配符,必须使用like操作符;like指示MySQL后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较 1、百分号(%)通配符 在搜索串中,%表示任何字符出现任意次数
想查看完整的使用show full processlist; 2.2 查询缓存(Cache&Buffer) 这是MySQL的一个可优化查询的地方,如果开启了查询缓存且在查询缓存过程中查询到完全相同的...缓存Select查询的结果和SQL语句 执行Select查询时,先查询缓存,判断是否存在可用的记录集,要求是否完全相同(包括参数值),这样才会匹配缓存数据命中。...预处理器根据一些MySQL规则进一步检查“解析树”是否合法,例如这里将检查数据表和数据列是否存在,还会解析名字和别名,看看它们是否有歧义,最后生成新的“解析树”。...如果开启了查询缓存,先将查询结果做缓存操作 返回结果过多,采用增量模式返回 3 MySQL存储引擎 存储引擎在MySQL的体系架构中位于第三层,负责MySQL中的数据的存储和提取,是与文件打交道的子系统...适用场景: MyISAM 不需要事务支持(不支持) 并发相对较低(锁定机制问题) 数据修改相对较少,以读为主 数据一致性要求不高 InnoDB 需要事务支持(具有较好的事务特性) 行级锁定对高并发有很好的适应能力
(schema)关于数据库和表的布局及特性的信息 列(column)表中的一个字段。...每个列都有相应的数据类型,用来定义列可以存储的数据种类 行 表中的数据是按行存储的,所保存的每个记录存储在自己的行内 主键(primary key)一列(或一组列),其值能够唯一区分表中的每一行...注意:1、任意两行都不具有相同的主键值 2、每个行都必须具有一个主键值(主键列不允许NULL值) SQL是结构化查询语言(Structured Query Language)的缩写,是一种专门用来与数据库通信的语言...4、检索数据 SELECT id,name FROM table; 使用DISTINCT 来告诉MySQL来返回不同的行 5、排序检索数据 ORDER BY ASC DESC 6、过滤数据...= 不等于 < 小于 <= 小于等于 > 大于 >= 大于等于 between 在指定的两个值之间 检查单个值 不匹配检查 范围值检查 空值检查 AND 操作符 OR 操作符 IN
key优先使用数值类型int,tinyint 性别(sex):0代表女,1代表男;数据库没有布尔类型,mysql推荐使用tinyint 2、理由 因为引擎在处理查询和连接时会逐个比较字符串中每一个字符...inner join 内连接,只保留两张表中完全匹配的结果集; left join会返回左表所有的行,即使在右表中没有匹配的记录; right join会返回右表所有的行,即使在左表中没有匹配的记录;...table在功能上与不带 where子句的 delete语句相同:二者均删除表中的全部行。...truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 truncate table删除表中的所有行,但表结构及其列、约束、索引等保持不变。...新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 drop table语句。
---- 使用索引扫描来优化排序 存储引擎: Innodb 重点: 优化排序 手段:利用索引 两个思路: 1 通过排序操作 、 2 按照索引顺序扫描数据 ---- 索引的列顺序和Order By子句的顺序完全一致...看下 type: index ---- 索引中所有列的方向(升序、降序)和 order by子句完全相同 ? 我们知道,字段的默认是 ase 升序排列的。...如果order by 都使用升序的 using index condition:5.6加入 ,会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行...在使用order by关键字的时候,如果待排序的内容不能由所使用的索引直接完成排序的话,那么MySQL有可能就要进行“文件排序” 【其实并不是从文件中查找排序,不要误解】。...最左侧的索引 rental_date 使用范围查询 来验证下 ? 结论: 如果查询中有某个列的范围查询,则其右边所有列都无法使用索引 ---- order by中的字段全部在关联表中的第一张表中
个人已经看过非常老的小绿本的《Mysql必知必会》版本,看到出到这本书的名字之后想再看看这本书。 最后千万不要认为SQL很简单,其实越是看似简单的东西越是复杂。魔鬼常在细节中。...列数据类型必须兼容:类型不必完全相同,但必须是 DBMS可以隐含 转换的类型(例如,不同的数值类型或不同的日期类型)。...下面是一些特殊的UINON操作: EXCEPT (有时称为 MINUS )可用来检索只在第一个表中存在而在第二个表中不存在的行 INTERSECT:可用来检索两个表中都存在的行 数据分组 分组常用的函数是...数据分组除了经常使用的WHERE条件之外还有HAVING,这两个关键字唯一的区别是前者是过滤行记录,后者是过滤分组记录,虽然大部分where条件都可以使用HAVING替换。...使用 COUNT(*) 对表中行的数目进行计数,不管表列中包含的是空值 ( NULL )还是非空值。 使用 COUNT(column) 对特定列中具有值的行进行计数,忽略 NULL 值。
个人已经看过非常老的小绿本的《Mysql必知必会》版本,看到出到这本书的名字之后想再看看这本书。 最后千万不要认为SQL很简单,其实「越是看似简单的东西越是复杂」。魔鬼常在细节中。...「列数据类型必须兼容」:类型不必完全相同,但必须是 DBMS可以隐含 转换的类型(例如,不同的数值类型或不同的日期类型)。...下面是一些特殊的UINON操作: EXCEPT (有时称为 MINUS )可用来检索只在第一个表中存在而在第二个表中不存在的行 INTERSECT:可用来检索两个表中都存在的行❞ 数据分组 分组常用的函数是...数据分组除了经常使用的WHERE条件之外还有HAVING,这两个关键字唯一的区别是「前者是过滤行记录,后者是过滤分组记录」,虽然大部分where条件都可以使用HAVING替换。...❝ 使用 COUNT(*) 对表中行的数目进行计数,不管表列中包含的是空值 ( NULL )还是非空值。 使用 COUNT(column) 对特定列中具有值的行进行计数,忽略 NULL 值。
(也就是说在mysql中可以使用的函数,在其他比如oracle中有可能就不支持使用,函数是没有普通SQL语句的可移植性强.)...(对行进行计数时,不会忽略一行数据中每个列为null值的行) ②使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。....对非数值数据使用MAX() 虽然MAX()一般用来找出最大的数值或日期值,但MySQL允许将它用来返回任意列中的最大值,包括返回文本列中的最大值。...与MAX()一样, MIN()要求指定列名.对非数值数据使用MIN() MIN()函数与MAX()函数类似,MySQL允许将它用来返回任意列中的最小值,包括返回文本列中的最小值。...版本中有小在5以下无效) ①对所有的行执行计算,指定ALL参数或不给参数(因为ALL是默认行为); ②只包含不同的值,指定DISTINCT参数。
如果它一开始就走全表扫描,直接一遍扫描就搞定; 虽然mysql是有优化器的,处于效率与成本考虑,遇到or条件,索引还是可能失效的; 8、尽量使用数值替代字符串类型 因为引擎在处理查询和连接时会逐个比较字符串中每一个字符...inner join 内连接,只保留两张表中完全匹配的结果集; left join会返回左表所有的行,即使在右表中没有匹配的记录; right join会返回右表所有的行,即使在左表中没有匹配的记录...truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 truncate table删除表中的所有行,但表结构及其列、约束、索引等保持不变。...新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 drop table语句。...区分度最高的放在联合索引的最左侧(区分度=列中不同值的数量/列的总行数)。 尽量把字段长度小的列放在联合索引的最左侧(因为字段长度越小,一页能存储的数据量越大,IO性能也就越好)。
某种特定类型的结构化清单; 相同的数据库中不能两次使用想用的表名; 不同的数据库中可以使用相同的表名; 列和数据类型: 表有列组成,列中存储着表中某部分的信息; 表中的一个字段,所有的表都是由一个或多个列组成的...在优化磁盘使用方面有重要作用; 行: 表中的一个记录; 别称记录,从技术上讲:行才是正确的术语; 主键: 一列或一组列,其值能够唯一区分表中的每一行; 唯一标识表中每行的这个列(或这组列...因为未知具有特殊的含义,数据库不知道它们是否匹配,所以在匹配过滤或不匹配过滤时不返回它们; 因此,再过滤数据时,一定要验证返回数据中确实给出了被过滤列具有的NULL的行。...比如: \\f 换页 \\n 换行 \\r 回车 \\t 制表符 \\v 纵向制表符 在一般的编程语言中,转义一般使用一个反斜线,在Mysql中为什么是两个才行?...; 对特定列中具有值的行进行技术,忽略NULL值; #返回客户数量--行 mysql> select count(*) from customers; +----------+ | count(*) |
mysql的字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。 10.如何选择字符集? 建议在能够完全满足应用的前提下,尽量使用小的字符集。...在创建 一个 n 列的索引时,实际是创建了 MySQL 可利用的 n 个索引。 多列索引可起几个索引的作用,因为可利用索引中最左边的列集来匹配行。 这样的列集 称为最左前缀。...在模式具有一个直接量前缀时,索引也用于 LIKE 运算。如果只将某个列用于其他类型的运算时(如 STRCMP( )) ,对其进行索引没有价值。 13.MySql有哪些索引?...MVCC 全称是多版本并发控制系统,InnoDB 的 MVCC 是通过在每行记录后面保存两个隐藏的列来实现,这两个列一个保存了行的创建时间,一个保存行的过期时间(删除时间)。...,表示mysql服务器将在存储引擎检索行后再进行过滤。
领取专属 10元无门槛券
手把手带您无忧上云