有两个简单的查询(因为它们很简单,我很困惑):
第一个:
select count(*)
from (select e.id as employee_id
from offic o
left join employee e
on o.employee_id = e.id)
where employee_id is null
第二个:
select count(employee_id)
from (select e.id as employee_id
from offic o
left join employee e
on o.employee_id = e.id)
where employee_id is null
这两个查询之间唯一的区别是count(employee_id)
和count(*)
,其余两个完全相同,但结果却不同。
第二个查询在有一些空值时返回零。
是什么问题或我不知道的其他事情?
答案 0 :(得分:5)
第二个查询将对具有非空(NOT NULL
)EMPLOYEE_ID
列值的行进行计数。不管EMPLOYEE_ID
中的内容是什么,第一个都计数所有行。
[编辑:一个简单的示例,显示正在计数的内容]
在下面阅读注释,好吧,其中一些似乎是错误(或者我误解了作者的意图),所以-在这里(基于11.2.0.4.0)。
SQL> select * From a1_test;
COL1 COL2 COL3
---------- ---------- ----------
1 3
1 2
1 2 3
2 3
3
SQL>
SQL> select
2 count(*) cnt,
3 count(1) cnt_1,
4 count(2) cnt_2,
5 count(3) cnt_3,
6 --
7 count(col1) cnt_c1,
8 count(col2) cnt_c2,
9 count(col3) cnt_c3
10 from a1_test;
CNT CNT_1 CNT_2 CNT_3 CNT_C1 CNT_C2 CNT_C3
---------- ---------- ---------- ---------- ---------- ---------- ----------
5 5 5 5 3 3 4