MySql中的count、NULL和空串的区别
**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 |
附、参考:
MySql中的count、NULL和空串的区别的更多相关文章
- 用count(*)还是count(列名) || Mysql中的count()与sum()区别
Mysql中的count()与sum()区别 首先创建个表说明问题 CREATE TABLE `result` ( `name` varchar(20) default NULL, `su ...
- 重新认识MySQL中的COUNT语句
在数据库的增删改查操作中,使用最频繁的就是查询操作. 而在所有查询操作中,统计数量操作更是经常被用到. 关于数据库中行数统计,无论是MySQL还是Oracle亦或者是SqlServer,都有一个函数可 ...
- mysql中的where和having子句的区别
mysql中的where和having子句的区别 having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句 ...
- MySQL中char、varchar和text的区别
三者空间占用方面: char:存储定长数据很方便,CHAR字段上的索引效率极高,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填 ...
- mysql中 REPLACE INTO 和 INSERT INTO 的区别
mysql中 REPLACE INTO 和 INSERT INTO 的区别 REPLACE INTO 和 INSERT INTO 功能类似,都是像表中插入数据,不同点在于:REPLACE INTO 首 ...
- MySQL中TEXT与BLOB字段类型的区别
这篇文章主要介绍了MySQL中TEXT与BLOB字段类型的区别,本文总结了6大区别,需要的朋友可以参考下 在MySQL中有两个字段类型容易让人感觉混淆,那就是TEXT与BLOB,特别是自己写博客程 ...
- mysql中 drop、truncate和delete的区别
mysql中drop.truncate和delete的区别 (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作. TRUNC ...
- mysql中的count(primary_key)、count(1)、count(*)的区别
表结构如下: mysql> show create table user\G; *************************** 1. row ********************** ...
- 【网络收集】MySql中IS NOT NULL与!=NULL的区别
在mysql中,筛选非空的时候经常会用到is not null和!=null,这两种方法单从字面上来看感觉是差不多的,其实如果去运行一下试试的话差别会很大!为什么会出现这种情况呢?null 表示什么也 ...
随机推荐
- 基于 Go 的可嵌入脚本语言 zygomys
zygomys zygomys 是一种可嵌入的脚本语言. 它是一个具有面向对象风格的现代化 Lisp,提供了一个解释器和 REPL(Read-Eval-Print-Loop:也就是说,它带有一个命令行 ...
- BZOJ 3672[NOI2014]购票(树链剖分+线段树维护凸包+斜率优化) + BZOJ 2402 陶陶的难题II (树链剖分+线段树维护凸包+分数规划+斜率优化)
前言 刚开始看着两道题感觉头皮发麻,后来看看题解,发现挺好理解,只是代码有点长. BZOJ 3672[NOI2014]购票 中文题面,题意略: BZOJ 3672[NOI2014]购票 设f(i)f( ...
- [Javascript] Nested generators
To see how to call another generator inside a generator: function* numbers () { ; ; yield* moreNumbe ...
- 019_linux驱动之_定时器的引入
(一)定义一个timer_list定时器结构体,linux 内核定时器 timer_list详解 (二)初始化定时器,当超时时间expires到之后会调用buttons_timer_function函 ...
- this绑定问题
this是属性和方法“当前”(运行时)所在的对象.this是函数调用时发生的绑定,它的值只取决于调用位置(箭头函数除外). 函数调用的时候会产生一个执行上下文,this是对这个执行上下文的记录. ❌误 ...
- python if else elif statement
name = input('what is your name?')if name.endswith('zd'): print("hello panzidong") name = ...
- 初次Java web项目的建立以及与数据库的连接
题目要求: 1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分) 2登录密码:要求显示“• ”或“*”表示输入位数,密码要求八位以上字母.数字组成.(1分) 3性别:要求用单 ...
- qemu for win64 下载
下载地址:https://qemu.weilnetz.de/w64/ 安装完成后,将安装目录加入到系统环境变量.
- oracle 常用工具类及函数
j_param json; jl_keys json_list; -- 创建json对象j_param j_param := json(p_in_str); -- 校验param域是否缺少必填参数 j ...
- 第11组 Beta冲刺(3/5)
第11组 Beta冲刺(3/5) 队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/12006665.html 作业博客 https://edu. ...