Hướng dẫn count row mysql - đếm hàng mysql

Bài viết này sẽ hướng dẫn nhiều cách khác nhau để lấy số lượng bản ghi trong database.

Đếm số bản ghi trong 1 bảng

Trong MySQL để đếm số bản ghi trong 1 bảng ta dùng lệnh:

SELECT 
    COUNT(*)
FROM
    table_name;

Ví dụ, lấy số bản ghi của bảng

SELECT 
    COUNT(*)
FROM
    customers;
3 trong sample database:

SELECT 
    COUNT(*)
FROM
    customers;

+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)

Đếm số bản ghi của 2 hay nhiều bảng

Trong MySQL để đếm số bản ghi của nhiều bảng, bạn sử dụng toán tử

SELECT 
    COUNT(*)
FROM
    customers;
4 để tập hợp các kết quả trả về trong mỗi câu lệnh
SELECT 
    COUNT(*)
FROM
    customers;
5.

Ví dụ, đếm số bản ghi của bảng

SELECT 
    COUNT(*)
FROM
    customers;
3 và
SELECT 
    COUNT(*)
FROM
    customers;
7:

SELECT 
    'customers' tablename, 
     COUNT(*) rows
FROM
    customers 
UNION 
SELECT 
    'orders' tablename, 
     COUNT(*) rows
FROM
    orders;

+-----------+------+
| tablename | rows |
+-----------+------+
| customers |  122 |
| orders    |  326 |
+-----------+------+
2 rows in set (0.01 sec)

Đếm số bản ghi của tất cả bảng trong database

Các bước sau sẽ giúp bạn đếm số bản ghi của tất cả bảng trong database

SELECT 
    COUNT(*)
FROM
    customers;
8

  1. Bước 1: Lấy tên tất cả tên bảng
  2. Bước 2: Tạo lệnh SQL bao gồm tất cả lệnh
    SELECT 
        COUNT(*)
    FROM
        customers;
    
    9 từ tất cả các bảng đã được phân tách bởi
    SELECT 
        COUNT(*)
    FROM
        customers;
    
    4
  3. Bước 3: Thực thi lệnh

Bước 1: lấy tất cả tên bảng, bạn truy vấn từ database

+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
1: lấy tất cả tên bảng, bạn truy vấn từ database
+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
1:

SELECT 
    table_name
FROM
    information_schema.tables
WHERE
    table_schema = 'classicmodels'
        AND table_type = 'BASE TABLE';

+--------------+
| TABLE_NAME   |
+--------------+
| customers    |
| employees    |
| offices      |
| orderdetails |
| orders       |
| payments     |
| productlines |
| products     |
+--------------+
8 rows in set (0.02 sec)

Bước 2: Tạo lệnh SQL, ở đây sử dụng hàm

+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
2 và
+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
3:
Tạo lệnh SQL, ở đây sử dụng hàm
+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
2 và
+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
3:

SELECT 
    CONCAT(GROUP_CONCAT(CONCAT('SELECT \'',
                        table_name,
                        '\' table_name,COUNT(*) rows FROM ',
                        table_name)
                SEPARATOR ' UNION '),
            ' ORDER BY table_name')
INTO @sql 
FROM
    table_list;

Trong câu truy vấn này,

+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
4 là danh sách các tên bảng là kết quả của câu truy vấn trong bước 1.

Câu truy vấn dưới sử dụng truy vấn đầu tiên như là derived table và trả về câu lệnh SQL như 1 chuỗi:

SELECT 
    CONCAT(GROUP_CONCAT(CONCAT('SELECT \'',
                        table_name,
                        '\' table_name,COUNT(*) rows FROM ',
                        table_name)
                SEPARATOR ' UNION '),
            ' ORDER BY table_name')
INTO @sql 
FROM
    (SELECT 
        table_name
    FROM
        information_schema.tables
    WHERE
        table_schema = 'classicmodels'
            AND table_type = 'BASE TABLE') table_list

Nếu MySQL của bạn từ 8.0+ thì bạn có thể dùng MySQL CTE (common table expression) thay vì derived table:

WITH table_list AS (
SELECT
    table_name
  FROM information_schema.tables 
  WHERE table_schema = 'classicmodels' AND
        table_type = 'BASE TABLE'
) 
SELECT CONCAT(
            GROUP_CONCAT(CONCAT("SELECT '",table_name,"' table_name,COUNT(*) rows FROM ",table_name) SEPARATOR " UNION "),
            ' ORDER BY table_name'
        )
INTO @sql
FROM table_list; 

Bước 3: thực thi câu lệnh

+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
5 sử dụng các lệnh đã được chuẩn bị: thực thi câu lệnh
+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
5 sử dụng các lệnh đã được chuẩn bị:

SELECT 
    COUNT(*)
FROM
    customers;
0

Hướng dẫn count row mysql - đếm hàng mysql

Đếm số bản ghi của tất cả bảng trong database với 1 câu truy vấn

Cách khác để lấy số bản ghi của tất cả bảng trong database là truy vấn dữ liệu trực tiếp từ database

+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
1:

SELECT 
    COUNT(*)
FROM
    customers;
1

Hướng dẫn count row mysql - đếm hàng mysql

Cách này đôi khi cho kết quả không chính xác bởi vì số bản ghi trong

+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
1 và số bản ghi thực tế của bảng là không được đồng bộ. Cho nên để tránh điều này thì bạn phải chạy lệnh
+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
8 trước khi đếm số bản ghi từ
+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.01 sec)
1.

SELECT 
    COUNT(*)
FROM
    customers;
2

Hãy like, share và comment để cùng nhau học tập ! ^^