一、語義不同
count(1):表示統(tǒng)計查詢結(jié)果的行數(shù),不考慮表中的任何列的值,只關(guān)心是否存在行。count(*):表示統(tǒng)計查詢結(jié)果的行數(shù),與count(1)類似,不考慮表中的任何列的值,只關(guān)心是否存在行。count(列名):表示統(tǒng)計指定列的非空值的數(shù)量,只統(tǒng)計指定列中不為NULL的行。二、性能差異
count(1)和count(*):這兩種寫法在大多數(shù)數(shù)據(jù)庫系統(tǒng)中的性能是相同的,因為它們都不關(guān)心具體的列值,只關(guān)心行的存在與否。count(列名):這種寫法在某些數(shù)據(jù)庫系統(tǒng)中可能會比count(1)和count(*)性能稍差,因為它需要檢查指定列的值是否為NULL,并排除NULL值的行。三、對空值的處理不同
count(1)和count(*):不關(guān)心表中的具體列值,因此不受空值影響,會將包含NULL值的行也計算在內(nèi)。count(列名):只統(tǒng)計指定列的非空值,會排除包含NULL值的行,只計算指定列中不為NULL的行四、使用范圍不同
count(1)和count(*):適用于查詢整個表或滿足特定條件的行數(shù)。count(列名):適用于統(tǒng)計特定列的非空值數(shù)量。五、結(jié)果集不同
count(1)和count(*):返回的結(jié)果集只有一行一列,即表示查詢結(jié)果的行數(shù)。count(列名):返回的結(jié)果集只有一行一列,即表示指定列的非空值數(shù)量。六、可讀性不同
count(1):語義上不夠明確,不容易理解其作用。count(*):語義明確,表示統(tǒng)計行數(shù)。count(列名):語義明確,表示統(tǒng)計指定列的非空值數(shù)量。延伸閱讀
COUNT(*)是什么
COUNT(*) 是一種數(shù)據(jù)庫查詢語句,用于統(tǒng)計某個表中的記錄數(shù)或滿足指定條件的記錄數(shù)。它返回一個表示記錄數(shù)量的整數(shù)值。使用 COUNT() 時,數(shù)據(jù)庫引擎會對指定的表進行掃描,并計算符合條件的記錄數(shù)量。 表示選擇所有的列,而不是特定的列名。因此,COUNT(*) 將統(tǒng)計整個表中的記錄數(shù),無論具體的列值是什么。