測試一count(列名)是否計算空值 --建個測試表 carete table test(id number(10),note varcahr2(10)); --插入數據 insert into test(id,note) values (1,'1');--note列有值 insert into test(id,note) values (2,'');--note有個'' insert into test(id) values (3);--note為空值 commite; --使用count(*/常量) select count(*) from test; COUNT(*) ---------- 3 select count(1) from test; COUNT(1) ---------- 3 --使用count(列名) select count(id) from test; COUNT(id)--這里是改上面的所以id是小寫的,默認應該是count(ID) ---------- 3 select count(note) from test; COUNT(NOTE) ---------- 1 結論:count(列名)不計算空值的列 測試二--是否根據rowid來計算 rowid是物理地址,union all單表 select count(id) from (select rowid rid,id from test union all select rowid rid,id from test); COUNT(ID) ---------- 6 顯然不是rowid來計算的,rowid是相當於一個列;相比較rowid更可能和count()結果一致的應該是rownum,rownum序列的最終值應該是count的結果; 結論:count不是依據rowid計算的