Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Truy vấn MySQL đếm số hàng trong nhiều bảng

Đếm số dòng của nhiều bảng trong một truy vấn MySQL

Sử dụng subquery trong mệnh đề SELECT để đếm số hàng của từng bảng riêng biệt, sau đó gom kết quả vào một hàng duy nhất.

Ví dụ minh họa

Tạo bảng DemoTable1:

mysql> CREATE TABLE DemoTable1 (FirstName VARCHAR(100));
Query OK, 0 rows affected (0.54 sec)

Chèn dữ liệu:

mysql> INSERT INTO DemoTable1 VALUES('Bob');
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO DemoTable1 VALUES('James');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable1 VALUES('John');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable1 VALUES('David');
Query OK, 1 row affected (0.18 sec)

Tạo bảng DemoTable2:

mysql> CREATE TABLE DemoTable2 (Marks INT);
Query OK, 0 rows affected (0.65 sec)

Chèn dữ liệu:

mysql> INSERT INTO DemoTable2 VALUES(98);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable2 VALUES(89);
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable2 VALUES(67);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable2 VALUES(34);
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO DemoTable2 VALUES(32);
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable2 VALUES(42);
Query OK, 1 row affected (0.17 sec)

Truy vấn đếm hàng của cả hai bảng cùng lúc:

mysql> SELECT 
    (SELECT COUNT(*) FROM DemoTable1) AS First_Table_Row,
    (SELECT COUNT(*) FROM DemoTable2) AS Second_Table_Row;

Kết quả:

+-----------------+------------------+
| First_Table_Row | Second_Table_Row |
+-----------------+------------------+
| 4               | 6                |
+-----------------+------------------+
1 row in set (0.00 sec)

Các phương pháp khác

1. UNION ALL (hiển thị theo hàng)

SELECT 'DemoTable1' AS TableName, COUNT(*) AS RowCount FROM DemoTable1
UNION ALL
SELECT 'DemoTable2', COUNT(*) FROM DemoTable2;
+------------+----------+
| TableName  | RowCount |
+------------+----------+
| DemoTable1 | 4        |
| DemoTable2 | 6        |
+------------+----------+

2. information_schema.TABLES (nhanh, ước lượng)

SELECT TABLE_NAME, TABLE_ROWS 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = DATABASE() 
AND TABLE_NAME IN ('DemoTable1', 'DemoTable2');

Lưu ý: TABLE_ROWS là ước lượng cho InnoDB, chính xác cho MyISAM.

3. Stored Procedure động (nhiều bảng)

DELIMITER //
CREATE PROCEDURE CountAllTables()
BEGIN
    SELECT TABLE_NAME, TABLE_ROWS 
    FROM information_schema.TABLES 
    WHERE TABLE_SCHEMA = DATABASE();
END //
DELIMITER ;

So sánh

Phương phápĐộ chính xácHiệu suấtPhù hợp
Subquery COUNT(*)Chính xác 100%Chậm (full scan)Ít bảng, cần chính xác
UNION ALLChính xác 100%ChậmCần định dạng hàng
information_schemaƯớc lượng (InnoDB)Rất nhanhNhiều bảng, monitor