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

Đếm số hàng từ nhiều bảng MySQL trong một truy vấn

Để 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.