MYSQL
MYSQL语法
COUNT主键和COUNT非主键结果有什么不同?
- COUNT()返回的是统计字段不为空的值
- 主键不为空,所以COUNT主键返回的是所有行记录
- COUNT字段可能为空,COUNT字段统计的是该字段非空的
- 性能排名 COUNT(1)=COUNT(*)>COUNT(主键字段)>COUNT(字段)
- COUNT(1)=COUNT(*) 走二级索引,不用判断字段是否为空;COUNT(主键字段)走二级索引,COUNT(字段)走主键索引,全表扫描
内连接和外连接有什么区别?
-
内连接返回两个表匹配(on)的数据: 可以用TABLE1 JOIN TABLE2 ON ,也可以直接WHERE
SELECT FROM TABLE1 JOIN TABLE2 ON CONDITION WHERE GROUP BY HAVING
- 左外连接:LEFT JOIN ON
- 右外连接:RIGHT JOIN ON
连接时,WHERE 和ON的区别?
- 内连接时候,WHERE等价于ON
- 外连接时,ON在连接操作时过滤,WHERE在连接操作之后过滤
WHERE和HAVING有什么区别?
- WHERE在分组和聚合函数之前过滤
- HAVING在分组和聚合函数之后过滤
DELETE DROP TRUNCATE的区别?
- DELETE 删除表中行记录,可回滚
- DROP 删除表
- TRUNCATE 清除表中所有数据, 类似于REDIS中的FLUSHALL
- 性能上 DROP>TRUNCATE>DELETE
联合查询中UNION和UNIONALL的区别?
SELECT * FROM a
UNION/UNIONALL
SELECT * FROM b
- UNION 会删除重复记录
- UNIONALL 不会删除重复记录