轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2021-03-25 11:29:35.893|閱讀 334 次
概述:有幾種方法可以在 MySQL 中獲取行的總數(shù)。某些數(shù)據(jù)庫管理產(chǎn)品提供表大小等數(shù)據(jù)庫統(tǒng)計信息,但也可以直接使用 SQL 來得到。在今天的文章中,我們將使用原生 COUNT() 函數(shù)來檢索 MySQL 數(shù)據(jù)庫中一個表或視圖中的行數(shù)。在第 2 部分中,我們將學(xué)習(xí)如何從多個表中獲取行計數(shù),甚至從數(shù)據(jù)庫中的所有表中獲取行計數(shù)。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
有幾種方法可以在 MySQL 中獲取行的總數(shù)。某些數(shù)據(jù)庫管理產(chǎn)品提供表大小等數(shù)據(jù)庫統(tǒng)計信息,但也可以直接使用 SQL 來得到。在今天的文章中,我們將使用原生 COUNT() 函數(shù)來檢索 MySQL 數(shù)據(jù)庫中一個表或視圖中的行數(shù)。在第 2 部分中,我們將學(xué)習(xí)如何從多個表中獲取行計數(shù),甚至從數(shù)據(jù)庫中的所有表中獲取行計數(shù)。
COUNT() 函數(shù)的多種形式
你可能已經(jīng)知道 COUNT() 函數(shù)可用于返回表的行數(shù)。但是它還有更多用途,因為 COUNT() 函數(shù)可用于計算表中的所有行的個數(shù)或僅計算與特定條件匹配的行的個數(shù)。秘密在于函數(shù)簽名,其中有幾種形式:COUNT(*)、COUNT(expression) 和 COUNT(DISTINCT expression)。
在每種情況,COUNT() 都返回一個 BIGINT,包含匹配行的數(shù)目,如果沒有找到匹配行則返回零。
計算表中所有行的個數(shù)
若要計算表中的所有行,無論它們是否包含 NULL 值,請使用 COUNT(*)。這種形式的 COUNT() 函數(shù)基本上返回 SELECT 語句返回的結(jié)果集中的行數(shù)。
SELECT COUNT(*) FROM cities;如上所述的語句,調(diào)用 COUNT(*) 函數(shù)而沒有 WHERE 子句或其他列,在 MyISAM 表上運行速度是非??斓模驗樾袛?shù)存儲在 information_schema 數(shù)據(jù)庫的 tables 表的 table_rows 列中。
對于 InnoDB 等事務(wù)存儲引擎,存儲精確的行計數(shù)是有不可能的,因為 InnoDB 不會在表中保留內(nèi)部行計數(shù)。如果是這樣,并發(fā)事務(wù)可能會同時“看到”不同數(shù)量的行。所以,SELECT COUNT(*) 語句只計算當(dāng)前事務(wù)可見的行的個數(shù)。這意味著在繁重的工作負(fù)載期間使用 COUNT(*) 運行查詢可能會導(dǎo)致查詢結(jié)果稍微不準(zhǔn)確。
使用 COUNT(expr) 僅計數(shù)非 Null 行的個數(shù)
什么都不傳遞給 COUNT() 會執(zhí)行函數(shù)的 COUNT(expr) 版本,但沒有參數(shù)。以這種方式調(diào)用 COUNT() 僅返回不包含 NULL 值的行。例如,假設(shè)我們有一個名為 code_values 的簡單表:
code_values即使有 4 行,從表中以 COUNT() 選擇將返回結(jié)果 2:
SELECT COUNT(*) FROM code_values;
+---------+
| COUNT() |
+---------+
| 2 |
+---------+
請注意,此版本的 COUNT() 函數(shù)很少使用,因為 NULL 行不應(yīng)該是規(guī)范化數(shù)據(jù)庫中的問題,這種情況只有在表沒有主鍵時才會發(fā)生。在大多數(shù)情況下,COUNT(*) 可以正常工作。
當(dāng)然,COUNT(expr) 接受適當(dāng)?shù)谋磉_(dá)式。這是另一個獲取 NULL 和非 NULL 行的查詢:
SELECT COUNT(IFNULL(code, 1)) FROM code_values;計算非 Null 值的個數(shù)
COUNT 函數(shù)的 COUNT(expr) 版本也接受單個列名,其效果是 COUNT(column_name) 將返回 column_name name 不是 NULL 的記錄數(shù)。因此,以下 SELECT 查詢將獲取 description 列包含非 NULL 值的行數(shù):
SELECT COUNT(description) FROM widgets;在第 2 部分中,我們將學(xué)習(xí)如何使用 COUNT(DISTINCT expression) 簽名以及如何從多個表中獲取行計數(shù)。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: