oracle 中 count(1) 和 count(*) 的區別在于:count(1) 忽略空值,僅計算非空行;count(*) 計算所有行,包括空值;選擇哪個函數取決于:是否存在空值、追求性能或一致性的優先級。
Oracle 中 COUNT(1) 和 COUNT(*) 的區別
在 Oracle 中,COUNT(1) 和 COUNT(*) 都是用于計算表中記錄數量的聚合函數,但二者之間存在著細微的區別。
COUNT(1)
僅計算非空值的行。
當表中存在空值時,它可以防止錯誤計數。
因為它忽略了空值,所以執行速度比 COUNT(*) 略快。
COUNT(*)
計算所有行,包括帶空值的。
即使表中有空值,它也會返回準確的計數。
由于它包括了空值,所以執行速度可能比 COUNT(1) 稍慢。
選擇使用哪一個?
選擇 COUNT(1) 還是 COUNT(*) 取決于以下因素:
是否存在空值:如果表中可能存在空值,使用 COUNT(1) 以避免錯誤計數。
性能:如果速度至關重要,并且您確定表中沒有空值,可以使用 COUNT(1)。
一致性:如果您希望跨所有行進行一致的計數,包括空值,則應使用 COUNT(*)。
示例
假設有一個名為 students
的表,其中包含以下數據:
<code>| id | name | age | |---|---|---| | 1 | John | 20 | | 2 | NULL | 25 | | 3 | Mary | 22 |</code>
登錄后復制
如果使用 COUNT(1) 查詢此表,它將返回以下結果:
<code>SELECT COUNT(1) FROM students; 2</code>
登錄后復制
這是因為 COUNT(1) 忽略了 NULL 值。
如果使用 COUNT(*) 查詢此表,它將返回以下結果:
<code>SELECT COUNT(*) FROM students; 3</code>
登錄后復制
這是因為 COUNT(*) 包含了 NULL 值。