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