MYSQL--语法

120 阅读1分钟

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 不会删除重复记录