总结一下这一周学习中遇到的几个问题:
1、数据库中schema(模式)和database(数据库)的理解
模式(schema)是表、视图等数据库中对象的集合,如下图所示,crazydata、data、db、first等均为模式,以sys为例,可以看到sys是表、视图、存储过程、函数等的集合。在MySQL中,schema等同于database。
2、mysql数据类型总结
3、mac下mysql导出CSV文件使用excel打开有乱码
乱码原因:Mac下文本的默认编码是UTF-8,而Excel对中文的处理是GBK编码。
解决方法:参考 https://blog.csdn.net/wqdwin/article/details/76058154
4、like中通配符使用注意事项
(1)常用通配符含义:
百分号%:0个、1个或多个字符
下划线_:单个字符
方括号[]:匹配[]中的任意一个字符
脱字号^:否定,等同于not like,如:
筛选出Customers表中名字开头不为J和M的人
select name
from Cusomers
where name like '[^JM]%';
等价于
select name
from Cusomers
where not name like '[JM]%';
(2)区分大小写
like "jet%" 与JetPack不匹配
(3)尾空格可能会干扰通配符。
如:在保存词anvil时,如果它后面有一个或者多个空格,则子句where name like ‘%anvil’不会匹配它们,因为l后面还有空格。
解决方法:使用函数去掉首尾空格。
5、count的几种用法
count是聚合函数,用来统计结果集的行数。
count(*)、count(1)、count(列号):统计结果中包含为null的行
count(列名):统计结果中不包含为null的行
count (distinct 列名):去除重复项
count和if结合使用:
例如:从城市职位招聘表中求电子商务相关职位数量大于50的城市的所有的职位数
SELECT city , count(1) FROM data
group by city
having count( if ( i like "%电子商务%", 1, null ) ) > 50
6、where和having:
(1)where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
(2)having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中使用聚组函数,不可跟列名,使用having 条件过滤出特定的组。
简而言之:where在分组之前进行过滤,过滤的是行;having对分组后的结果进行过滤,过滤的是组。
7、and和or的优先级
and具有较高优先级。因此,使用and和or连接多个过滤条件时,注意是否需要加括号,提升or的优先级。
8、like与正则表达式区别
like匹配整个值才能返回,正则表达式匹配时,值的某一部分(子串)符合REGEXP即可