1.结构
1. 1 查询语句(书写格式)
1.2 查询语句执行步骤
1.3 group by
- group by 分组,输出是分组后第一条数据,如上图所示。
1.4 count(1) 与 count(name) 区别
- 也就是说,count(1)时候,会自动帮我们虚拟化一个temp出来,全是写入1, 然后根据分组情况 数 1 的个数(如上图),但是如果count(name) 情况下,出现 name为空,count(name) 不记录它的值。
- count(distinct *) count()中可以加 distinct, 如果是count(distinct 1) 那么结果就是 1
- group by可以多列分组
1.5 聚集函数
- count(1) 等价于 sum(1), 计数
- count(name) 计数 name 中不为NULL 的数值
- count(distinct name) 计数name 不为NULL 且不重复
- 注:count(1) 等于 sum(1), count(2) 等于 count(1),
-
sum(2) 等于 2*count(2)
1.6 清空表数据
-
TRUNCATE 表名;
1.7 having
-
where 与 having 都是有过滤的功能,但是 where 中的过滤是对 from 得到的表中内容进行过滤,having 过滤是对group by 之后的内容进行过滤
1.7 case when
-
case when 也只是一种查询(在select中出现),没有修改数据库本身的内容,只是展示出的内容进行了修改,
1.8 join
-
join 相当于是笛卡尔乘,A表的每一行与B表相乘,组合成一个大表
-
join on ,on(条件) 是 进行过滤
left join 与 join 区别:
1. left join 必须要有 on 条件
2. 会检查左边表的数据是否都包含在新生成的表中,
是,则与join没有区别
否,用NULL与不包含的行组成新行加入新表
-
left join 两边的表 不能互相交换,否则会出现不一样的结果
1.9 索引
-
索引的使用规则:数据分的越开,建立索引越好
-
索引使用,看能不能进行比较过滤
- SQL语句中查看有没有走索引的关键字: EXPLAIN,查看 key值是否为空,不为空则走了索引,比如
-
EXPLAIN SELECT * FROM stuss where id = 2;
- 在单列索引中,一般 where 条件中的 and , =‘值’,between and,> , <都是可以走索引的,like" 值% "可以走索引,但是like “%值” 不能走索引。也就是可以比较过滤就可以走索引
2.1 聚簇索引 与 非聚簇索引
-
非聚簇索引依赖于聚簇索引,非聚簇索引中存储主键,聚簇索引中存储完整的信息。一般主键是聚簇索引,主键外的索引是非聚簇索引
2.2 联合索引