Để lấy số lượng hàng (COUNT(*)) từ nhiều bảng khác nhau trong một kết quả, dùng **subquery trong SELECT** (mỗi subquery trả về 1 giá trị) – thường chọn từ bảng giả DUAL hoặc không cần FROM (MySQL cho phép).
Cú pháp
SELECT
(SELECT COUNT(*) FROM bang_1) AS ten_alias_1,
(SELECT COUNT(*) FROM bang_2) AS ten_alias_2,
...;
Hoặc với FROM DUAL (tuỳ chọn, MySQL cho phép bỏ):
SELECT
(SELECT COUNT(*) FROM bang_1) AS ten_alias_1,
(SELECT COUNT(*) FROM bang_2) AS ten_alias_2
FROM DUAL;
Ví dụ minh họa
Tạo bảng 1 (chỉ khóa chính, 6 hàng):
mysql> CREATE TABLE DemoTable1 (Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY); mysql> INSERT INTO DemoTable1 VALUES (),(),(),(),(),();
Tạo bảng 2 (2 hàng):
mysql> CREATE TABLE DemoTable2 (Name VARCHAR(20));
mysql> INSERT INTO DemoTable2 VALUES ('Chris'), ('David');
Truy vấn đếm 2 bảng:
mysql> SELECT
-> (SELECT COUNT(*) FROM DemoTable1) AS FirstTable1Count,
-> (SELECT COUNT(*) FROM DemoTable2) AS SecondTable2Count;
Kết quả:
+---------------------+----------------------+ | FirstTable1Count | SecondTable2Count | +---------------------+----------------------+ | 6 | 2 | +---------------------+----------------------+
So sánh COUNT(*) vs COUNT(cot)
COUNT(*): đếm **tất cả hàng** (kể cả NULL toàn bộ hàng).COUNT(cot): đếm hàng cócot IS NOT NULL.- Với bảng có PRIMARY KEY NOT NULL,
COUNT(*)=COUNT(pk)= số hàng.
Mở rộng: Đếm nhiều bảng cùng lúc với thông tin schema
SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'ten_database';
TABLE_ROWS là ước lượng (chính xác cho MyISAM, ước lượng cho InnoDB). Dùng COUNT(*) cho chính xác tuyệt đối.