Mysql的基本查询语句
聚集函数
mysql有5个聚集函数,分别是AVG,MAX,MIN,SUM,COUNT.
分组
分组的使用group by作为关键字,having作为条件关键字。
having和where的区别:1.where过滤的是指定的行,而不是分组,因为where没有分组的概念。从技术上来说,
where的所有技术和选项都适用于having。2.where是在数据分组钱进行过滤,having是在数据分组后进行过滤。
分组与排序
分组有时候需要排序,用到order by ,一般放在having后面使用。
子查询和自连接查询
有时候两个语句都能查询出来对应的需求,一般来说,自连接比子查询要快一些
自连接和外连接
有的数据库有全连接
自连接是排除了所有条件没有匹配到的值,左外连接是以左表为准,如果有值是null,也能匹配上。
组合查询 union 和unionall
组合查询中必须包含相同的列,表达式或聚集函数,列数据类型必须兼容。这样两个查询出来的结果才能组合
union去除重复的行,unionall相反。即使有不匹配的列名的表,也可以用别名组合
组合查询只能出现一条order by子句,一般放在最后面
全文本搜索
全文本搜索是引擎MYISAM支持的,INNODB并不支持。
使用全文本搜索:create table pro(noteid int,note_text text,FULLTEXT(note_text))这样就算创建了全文本搜索
select note_text from pro where Match(note_text) Against('rabbit');这就是使用了全文本搜索
表示在索索出包含rabbit文字的一行数据。搜索不区分大小写。搜索出的顺序是有等级的,等级高的提前输出。
布尔文本搜索:即使没有fulltext索引也可以使用文本搜索
select note_text from pro where Match(note_text) Against('rabbit' IN BOOLEAN MODE)
mysql定义了50%的规则,即一个词出现了50%以上的行中,就不再输出。比如有三行数据,全文本
搜索是不返回数据的
也有操作符可以使用(这个查文档,不再记录)
删除数据:truncate和delete
truncate:直接删除表然后再创建一个具有相同名称的空表
delete: 值一行一行的删除
所以清空表的时候需要使用truncate比较快。
主键可以这样设置:
primary key(列名)
引擎简介:
InnoDB:是一个可靠的事务处理引擎,它不支持全文本搜索。
MyISAM:是一个性能极高的引擎,它支持全文本,但是不支持事务
如果多张表用不同引擎创建,注意:外键不支持跨引擎
视图:
视图可以嵌套,视图不能有索引,视图可以和表一块使用
create view 视图名 来创建。show create view 视图名称 查看创建视图的语句。 drop view 视图名称删除视图
视图的更新:一般来说视图是可以更新的,但是如果存在 分组 , 连接, 子查询 , 并, 聚集函数 , distinct, 计算列,不能更新
所以一般是不能更新的。
如果使用嵌套的视图或者调用复杂的视图,性能可能下降的特别厉害。
存储过程:
游标:
触发器: