Đếm số lượng hàng của nhiều bảng trong một SELECT duy nhất
Sử dụng subquery trong danh sách SELECT kết hợp với bảng giả DUAL (hoặc không cần FROM) để trả về số lượng hàng của nhiều bảng cùng lúc.
1. Tạo bảng 1 và chèn dữ liệu
mysql> CREATE TABLE DemoTable1 (Name VARCHAR(40));
mysql> INSERT INTO DemoTable1 VALUES ('Chris'), ('Robert'), ('Mike');
2. Tạo bảng 2 và chèn dữ liệu
mysql> CREATE TABLE DemoTable2 (Score INT);
mysql> INSERT INTO DemoTable2 VALUES (86), (98), (75);
3. Xem dữ liệu
mysql> SELECT * FROM DemoTable1; -- 3 hàng mysql> SELECT * FROM DemoTable2; -- 3 hàng
4. Truy vấn: Đếm hàng 2 bảng trong 1 kết quả
mysql> SELECT
(SELECT COUNT(*) FROM DemoTable1) AS FirstTableCount,
(SELECT COUNT(*) FROM DemoTable2) AS SecondTableCount
FROM DUAL;
5. Kết quả
+-----------------+------------------+ | FirstTableCount | SecondTableCount | +-----------------+------------------+ | 3 | 3 | +-----------------+------------------+
Giải thích:
- Mỗi subquery
(SELECT COUNT(*) FROM table)trả về 1 giá trị scalar FROM DUAL: Bảng giả đơn hàng đơn cột (dummy table) - bắt buộc trong MySQL khi SELECT không có FROM bảng thật- Kết quả: 1 hàng, 2 cột chứa count của từng bảng
Cách thay thế không cần DUAL (MySQL cho phép):
SELECT
(SELECT COUNT(*) FROM DemoTable1) AS FirstTableCount,
(SELECT COUNT(*) FROM DemoTable2) AS SecondTableCount;
Mở rộng - Đếm nhiều bảng hơn:
SELECT
(SELECT COUNT(*) FROM table1) AS t1,
(SELECT COUNT(*) FROM table2) AS t2,
(SELECT COUNT(*) FROM table3) AS t3,
(SELECT COUNT(*) FROM table4) AS t4;
Ứng dụng: Dashboard thống kê, health check, migration verification, so sánh số lượng bản ghi giữa môi trường.