MySQL中count()函数的使用

基础必备:

      在MySQL中,0或 NULL意味着假(0)而其它值意味着真(1)。布尔运算(age = 4 或者 age is null都是布尔运算)的默认真值是1。不能使用算数运算符与null做运算,其结果都是null:

      select   1 + null,1 - null, 1 * null, 1 / null, 1 % null, 1 = null, 1 <> null,  1 > null , 1 < null; ---结果都是null

但是 :

      

可这样理解:1 or null 因为前面1为真,所以没必要往后运算了,结果就是1

0 or null 因为前面0为假,所以要接着往后看才能知道结果,又由于后面是null,任何表达式与null运算都是null

     

 

可这样理解:1 and null 因为前面1为真,继续往后看,后面为null, 任何数与null运算都是null

0 and null 因为前面0为假,and运算就没必要往后看了,所以结果是0

 

count函数有两种形式 

1.count(expr):返回SELECT语句检索到的行中非NULL值的数目。

2.count(distinct  expr,[expr....]):返回不同的非NULL值的行的数目。

 select  distinct  name,age from  t1;  --查询t1表中name和t1都不相同的行。前面加上count()就是求一共有多少行name和age不同。

        在t1表中有如下数据:

             

 

 select count(*),count(age),count(age=21),count(age = 21 or null),count(age is null),count(age is  not null),count(null)  from t1;

 

 

查询结果是:7,6,7,3,7,7,0

分析:

count(*):很明显是结果集的行数

        count(age):age不为空的行数

        count(age=21):第一行和第二行age都是21,所以表达式age=21的值为1;而第四行age为22,所以age=21的布尔值为0,但是不管age=21的结果是0还是1,这两种结果都不是null,所以答案是7.

        count(age=21  or  null):第一行和第二行age都是21,所以表达式age=21 or null的值为1;而第四行age为22,所以表达式age=21 or null的值为null,那么这一行在count计算的时候就不会被包括在内了。

        count(age  is null):age is null的结果0或者1(select  age  is null ;)这两种结果都不是null值,所以答案还是7

        count(age  is not null):同上

        count(null):因为count统计的是expr不为null的行数,很明显答案是0

 

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值