**1、count (1)、count (*) 与 count (列名) 的区别**

count(1) count(*) count (列名)
作用 统计表中的所有的记录数 会统计表中的所有的记录数 统计该字段在表中出现的次数
是否包含字段为 null 包含 包含 不包含
区别 count (1) 和 count (*) 基本没差别,实际建议count (*) count (1) 和 count (*) 基本没差别实际建议count (*)

效率:

  • 列名为主键,count (列名) 会比 count (1) 快
  • 列名不为主键,count (1) 会比 count (列名) 快
  • 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
  • 如果有主键,则 select count(主键)的执行效率是最优的
  • 如果表只有一个字段,则 select count(*)最优。

2、MYSQL 中Null 和空串的区别,以及比较

null 空字符串
含义 “没有值” 或 “未知值”,且它被看作与众不同的值。 空字符串
比较 IS NULL或者IS NOT NULL =、< 或!=

如果字符串和Null比较,会发生什么情况?
注意:=<=>的区别

3、各函数对Null的处理

函数 效果
AVG () 忽略 NULL 值,而不是将其作为 “0” 参与计算
COUNT(*) 不忽略NULL 值
COUNT (字段名) 忽略NULL 值
SUM () 忽略 NULL 值。且当对多个列运算求和时,如果运算的列中任意一列的值为 NULL,则忽略这行的记录。
GROUP BY 两个 NULL 值视为相同。
如果运行 ORDER BY ... ASC,则 NULL 值出现在最前,若运行 ORDER BY ... DESC,则 NULL 值出现在最后。
distinct 无论遇到多少个空值,结果中只返回一个 null

附、参考:

  1. count (1)、count (*) 与 count (列名) 的执行区别 - iFuMI 的博客 - CSDN 博客
    注:很棒的一篇文章。
  2. 高性能 MySQL——Count (1) OR Count (*)? - 知乎
    注:原文有错,不过还是值得参考。
  3. SQL 中的 SUM ()、AVG ()、COUNT () 等聚集函数对 NULL 值的处理方法 - J__Max 的博客 - CSDN 博客
  4. MySql 判断是否为 null 或空字符串 - bestlove12345 的博客 - CSDN 博客
  5. MySql 中判断字符串相等 - 洋成林 - CSDN 博客

MySql中的count、NULL和空串的区别的更多相关文章

  1. 用count(*)还是count(列名) || Mysql中的count()与sum()区别

    Mysql中的count()与sum()区别   首先创建个表说明问题 CREATE TABLE `result` (   `name` varchar(20) default NULL,   `su ...

  2. 重新认识MySQL中的COUNT语句

    在数据库的增删改查操作中,使用最频繁的就是查询操作. 而在所有查询操作中,统计数量操作更是经常被用到. 关于数据库中行数统计,无论是MySQL还是Oracle亦或者是SqlServer,都有一个函数可 ...

  3. mysql中的where和having子句的区别

    mysql中的where和having子句的区别 having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句 ...

  4. MySQL中char、varchar和text的区别

    三者空间占用方面: char:存储定长数据很方便,CHAR字段上的索引效率极高,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填 ...

  5. mysql中 REPLACE INTO 和 INSERT INTO 的区别

    mysql中 REPLACE INTO 和 INSERT INTO 的区别 REPLACE INTO 和 INSERT INTO 功能类似,都是像表中插入数据,不同点在于:REPLACE INTO 首 ...

  6. MySQL中TEXT与BLOB字段类型的区别

    这篇文章主要介绍了MySQL中TEXT与BLOB字段类型的区别,本文总结了6大区别,需要的朋友可以参考下   在MySQL中有两个字段类型容易让人感觉混淆,那就是TEXT与BLOB,特别是自己写博客程 ...

  7. mysql中 drop、truncate和delete的区别

    mysql中drop.truncate和delete的区别 (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作. TRUNC ...

  8. mysql中的count(primary_key)、count(1)、count(*)的区别

    表结构如下: mysql> show create table user\G; *************************** 1. row ********************** ...

  9. 【网络收集】MySql中IS NOT NULL与!=NULL的区别

    在mysql中,筛选非空的时候经常会用到is not null和!=null,这两种方法单从字面上来看感觉是差不多的,其实如果去运行一下试试的话差别会很大!为什么会出现这种情况呢?null 表示什么也 ...

随机推荐

  1. Linux新手到大佬系列——1

    站长资讯平台:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的Unix工具软件.应用程序和网络协议 ...

  2. Python 11--文件流

  3. Reflect对象

    一.Reflect对象基础 Reflect对象是ES6出现的新的API,用于操作对象内部的方法. 特点: 1. 对于操作有明确的返回结果.如返回布尔值表示操作成功与否 2. 和Proxy的拦截方法一一 ...

  4. struts1 action之间的跳转

    ActionForward actionForward = new ActionForward(); actionForward.setPath("xxxxxxxx");//跳转的 ...

  5. CF796C Bank Hacking 细节

    思路十分简单,答案只有 3 种可能,但是有一些细节需要额外注意一下. code: #include <bits/stdc++.h> #define N 300002 #define set ...

  6. 数据库学习之二--SQL语句以及数据类型

    一.SQL语句种类: 1. DDL(Data Definition Language,数据定义语言)用来创建或者删除存储数据用的数据库以及数据库中的表;包含以下几种指令: a. CREATE:CREA ...

  7. openstack 无法创建新虚拟机报错 openstack报错:Host is not mapped to any cell

    关联错误提示:Host is not mapped to any cell 控制节点上执行: root@ubsv:/home/makeit# nova-manage cell_v2 discover_ ...

  8. 安装APK时报错:Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]

    安装APK时报错:Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI] 可以使用adb install -t 解决 对于已经在手机的文件可以使用pm ...

  9. java基础篇之Object类

    1.Object类是所有类的超类 2.Object类的equals方法 public boolean equals(Object obj) {return (this == obj);} equals ...

  10. linux调用库的方式

    linux调用库的方式有三种:1.静态链接库2.动态链接库3.动态加载库 其中1,2都是在编程时直接调用,在链接时加参数-l进行链接,运行时自动调用第三种需要在编程时使用dlopen等函数来获取库里面 ...