นับ COUNT(*) จากหลายตารางในคำสั่งเดียว
ใช้ Subquery ใน SELECT Clause แต่ละ Subquery นับจากตารางหนึ่ง แล้วรวมผลลัพธ์เป็นแถวเดียว หลายคอลัมน์
ไวยากรณ์
SELECT
(SELECT COUNT(*) FROM table1) AS table1_count,
(SELECT COUNT(*) FROM table2) AS table2_count
FROM DUAL;
DUAL เป็น Dummy Table ใน MySQL (และ Oracle) ใช้เมื่อต้องการ SELECT โดยไม่มี FROM Table จริง
สร้างตาราง 1 และข้อมูล (6 แถว)
mysql> CREATE TABLE DemoTable1 (Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY); Query OK, 0 rows affected (0.56 sec) mysql> INSERT INTO DemoTable1 VALUES(),(),(),(),(),(); Query OK, 6 rows affected
สร้างตาราง 2 และข้อมูล (2 แถว)
mysql> CREATE TABLE DemoTable2 (Name VARCHAR(20));
Query OK, 0 rows affected (0.64 sec)
mysql> INSERT INTO DemoTable2 VALUES('Chris'), ('David');
Query OK, 2 rows affected
คำสั่งนับจากทั้งสองตาราง
mysql> SELECT
-> (SELECT COUNT(*) FROM DemoTable1) AS FirstTable1Count,
-> (SELECT COUNT(*) FROM DemoTable2) AS SecondTable2Count
-> FROM DUAL;
ผลลัพธ์
+---------------------+----------------------+ | FirstTable1Count | SecondTable2Count | +---------------------+----------------------+ | 6 | 2 | +---------------------+----------------------+
วิธีอื่น: UNION ALL (แนวตั้ง)
SELECT 'DemoTable1' AS table_name, COUNT(*) AS row_count FROM DemoTable1 UNION ALL SELECT 'DemoTable2', COUNT(*) FROM DemoTable2;
ผลลัพธ์แนวตั้ง
+------------+-----------+ | table_name | row_count | +------------+-----------+ | DemoTable1 | 6 | | DemoTable2 | 2 | +------------+-----------+
MySQL 8.0: ใช้ VALUES ROW Constructor
SELECT t.table_name, t.row_count
FROM (
VALUES ROW('DemoTable1', (SELECT COUNT(*) FROM DemoTable1)),
ROW('DemoTable2', (SELECT COUNT(*) FROM DemoTable2))
) AS t(table_name, row_count);
Information Schema (สำหรับนับทุกตารางใน Database)
SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_database_name';
หมายเหตุ: TABLE_ROWS เป็นประมาณการสำหรับ InnoDB (ไม่ Real-time) ใช้ COUNT(*) สำหรับค่าที่แม่นยำ
Performance: COUNT(*) บน InnoDB
- InnoDB ไม่เก็บ Row Count ไว้ (ต่าง MyISAM)
COUNT(*)ต้อง Scan Index (Primary Key) ทุกครั้ง- ตารางใหญ่: ใช้ Trigger/Maintain Counter Table / Approximate từ Information Schema