您的位置:首页 > 数据库 > MySQL

MySQL中count()函数的使用

2015-05-25 21:21 489 查看
基础必备:

      在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql