共計 3573 個字符,預計需要花費 9 分鐘才能閱讀完成。
本篇內容主要講解“mysql count 的作用是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“mysql count 的作用是什么”吧!
mysql count 是一個聚合函數,用于返回指定匹配條件的行數;count 函數的使用語法如“select count(*) from user;”,表示統計所有的記錄,包括 NULL。
1. COUNT()函數概述
COUNT() 是一個聚合函數,返回指定匹配條件的行數。開發中常用來統計表中數據,全部數據,不為 NULL 數據,或者去重數據。
2. COUNT()參數說明
COUNT(1):統計不為 NULL 的記錄。
COUNT(*):統計所有的記錄(包括 NULL)。
COUNT(字段):統計該 字段 不為 NULL 的記錄。
如果這個字段是定義為 not null 的話,一行行地從記錄里面讀出這個字段,判斷不能為 null,按行累加。
如果這個字段定義允許為 null 的話,判斷到有可能是 null,還要把值取出來在判斷一下,不是 null 才累加。
COUNT(DISTINCT 字段):統計該 字段 去重且不為 NULL 的記錄。
-- MySql 統計函數 count 測試
-- 創建用戶表,新增測試數據
CREATE TABLE `user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT ID 主鍵 ,
`name` varchar(64) DEFAULT NULL COMMENT 姓名 ,
`sex` varchar(8) DEFAULT NULL COMMENT 性別 ,
`age` int(4) DEFAULT NULL COMMENT 年齡 ,
`born` date DEFAULT NULL COMMENT 出生日期 ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT= 用戶表
INSERT INTO `category`.`user`(`id`, `name`, `sex`, `age`, `born`) VALUES (1, % 張三 % , 男 , 22, 2022-04-22
INSERT INTO `category`.`user`(`id`, `name`, `sex`, `age`, `born`) VALUES (2, 李四 , 女 , 12, 2022-04-01
INSERT INTO `category`.`user`(`id`, `name`, `sex`, `age`, `born`) VALUES (3, 王小二 , 女 , 12, 2022-04-28
INSERT INTO `category`.`user`(`id`, `name`, `sex`, `age`, `born`) VALUES (4, 趙四 , 男 , 23, 2022-04-28
INSERT INTO `category`.`user`(`id`, `name`, `sex`, `age`, `born`) VALUES (5, , 女 , 23, 2022-04-28
INSERT INTO `category`.`user`(`id`, `name`, `sex`, `age`, `born`) VALUES (6, NULL, 女 , 60, 2022-04-28
INSERT INTO `category`.`user`(`id`, `name`, `sex`, `age`, `born`) VALUES (7, NULL, 女 , 61, 2022-04-28
select * from user;
-- 統計數據:7 條數據,統計所有的記錄(包括 NULL)。
select count(*) from user;
-- 統計數據:7 條數據,統計不為 NULL 的記錄。
select count(1) from user;
-- 統計數據:5 條數據,COUNT(字段):統計該 字段 不為 NULL 的記錄,注意是 null 不是空 字符串
select count(name) from user;
-- 統計數據:5 條數據,COUNT(DISTINCT 字段):統計該 字段 去重且不為 NULL 的記錄。
select count(distinct name) from user;
3. COUNT()判斷存在
SQL 不再使用 count,而是改用 LIMIT 1,讓數據庫查詢時遇到一條就返回,不要再繼續查找還有多少條了, 業務代碼中直接判斷是否非空即可。
select 1 from emp LIMIT 1; 效率是最高的,尤其是需要 limit 限制行數,很容易忽略。
-- SQL 查找是否 存在
-- 員工表, 存在則進行刪除
drop table if EXISTS emp;
create table emp(
id int unsigned primary key auto_increment,
empno mediumint unsigned not null default 0,
empname varchar(20) not null default ,
job varchar(9) not null default ,
mgr mediumint unsigned not null default 0,
hiredate datetime not null,
sal decimal(7,2) not null,
comn decimal(7,2) not null,
depno mediumint unsigned not null default 0
);
-- 新增 cehsi 數據
測試數據:https://blog.csdn.net/m0_37583655/article/details/124385347
-- cahxun
select * from emp ;
-- 時間:1.082s,數據:5000000
explain select count(*) from emp;
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE Select tables optimized away
-- 時間:1.129s,數據:5000000
explain select count(1) from emp;
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE Select tables optimized away
-- 時間:1.695s,數據:5000000
explain select 1 from emp;
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE emp idx_emp_depno 3 4981060 100.00 Using index
-- SQL 不再使用 count,而是改用 LIMIT 1,讓數據庫查詢時遇到一條就返回,不要再繼續查找還有多少條了, 業務代碼中直接判斷是否非空即可
-- 時間:0.001s,數據:5000000
explain select 1 from emp LIMIT 1;
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE emp idx_emp_depno 3 4981060 100.00 Using index
4. COUNT()阿里開發規范
1.【強制】不要使用 count(列名)或 count(常量)來替代 count(),count()是 SQL92 定義的標 準統計行數的語法, 跟數據庫無關, 跟 NULL 和非 NULL 無關. 說明:count(*)會統計值為 NULL 的行, 而 count(列名)不會統計此列為 NULL 值的行.
2.【強制】count(distinct col) 計算該列除 NULL 之外的不重復行數, 注意 count(distinct col1, col2) 如果其中一列全為 NULL, 那么即使另一列有不同的值, 也返回為 0.
到此,相信大家對“mysql count 的作用是什么”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!