Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

นับจำนวนแถวในหลายตารางพร้อมกันด้วย Subquery ใน MySQL

การนับแถว (COUNT) หลายตารางในคิวรี่เดียว

ใช้ **Subquery** ในส่วน SELECT เพื่อนับแถวของแต่ละตารางแยกกัน แล้วรวมผลลัพธ์ในแถวเดียว

Syntax

SELECT 
    (SELECT COUNT(*) FROM table1) AS table1_count,
    (SELECT COUNT(*) FROM table2) AS table2_count,
    ...;

ตัวอย่างการใช้งาน

สร้างตารางแรก DemoTable1 (ชื่อ):

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

mysql> INSERT INTO DemoTable1 VALUES ('Bob'), ('James'), ('John'), ('David');
Query OK, 4 rows affected

สร้างตารางที่สอง DemoTable2 (คะแนน):

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

mysql> INSERT INTO DemoTable2 VALUES (98), (89), (67), (34), (32), (42);
Query OK, 6 rows affected

นับแถวทั้งสองตารางพร้อมกัน:

mysql> SELECT 
    (SELECT COUNT(*) FROM DemoTable1) AS First_Table_Row,
    (SELECT COUNT(*) FROM DemoTable2) AS Second_Table_Row;
+-----------------+------------------+
| First_Table_Row | Second_Table_Row |
+-----------------+------------------+
| 4               | 6                |
+-----------------+------------------+
1 row in set (0.00 sec)

วิธีอื่นๆ

  • UNION ALL (แนวตั้ง):
    SELECT 'DemoTable1' AS tbl, COUNT(*) FROM DemoTable1
    UNION ALL
    SELECT 'DemoTable2', COUNT(*) FROM DemoTable2;
  • JOIN (ถ้ามีความสัมพันธ์): ไม่เหมาะสำหรับ COUNT แยกตาราง
  • INFORMATION_SCHEMA (ประมาณการ):
    SELECT TABLE_NAME, TABLE_ROWS 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME IN ('DemoTable1','DemoTable2');
    หมายเหตุ: TABLE_ROWS เป็นค่าประมาณการสำหรับ InnoDB

ประสิทธิภาพ

  • Subquery COUNT(*) บน InnoDB อาจช้า หากตารางใหญ่ (Full Table Scan)
  • ควรมี Index หรือใช้ Counter Table / Trigger นับไว้ล่วงหน้า
  • COUNT(*) เร็วกว่า COUNT(col) เพราะไม่นับ NULL