MySQL에서 여러 테이블의 행 개수를 동시에 세는 방법
MySQL에서 여러 테이블에 저장된 데이터가 각각 몇 건인지 확인해야 하는 경우가 자주 있습니다. 이럴 때 서브쿼리(subquery)를 활용하면 하나의 쿼리로 여러 테이블의 COUNT(*) 결과를 동시에 조회할 수 있습니다.
기본 문법은 다음과 같습니다.
SELECT
(SELECT COUNT(*) FROM yourTableName1) AS anyAliasName1,
(SELECT COUNT(*) FROM yourTableName2) AS anyAliasName2
FROM dual;각 서브쿼리가 해당 테이블의 전체 행 수를 계산하고, 별칭(Alias)을 통해 결과 컬럼의 이름을 지정합니다. FROM dual은 단일 행을 반환하기 위한 더미 테이블로, MySQL에서는 생략해도 무방합니다.
예제 테이블 생성하기
먼저 첫 번째 테이블을 생성합니다.
mysql> CREATE TABLE DemoTable1
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY
-> );
Query OK, 0 rows affected (0.56 sec)INSERT 명령으로 레코드를 여러 건 삽입합니다. VALUES에 빈 괄호를 반복하면 AUTO_INCREMENT 컬럼만 있는 테이블에 손쉽게 데이터를 넣을 수 있습니다.
mysql> INSERT INTO DemoTable1 values(),(),(),(),(),(); Query OK, 6 rows affected (0.24 sec) Records: 6 Duplicates: 0 Warnings: 0
SELECT 문으로 저장된 모든 레코드를 확인합니다.
mysql> SELECT * FROM DemoTable1;
실행 결과는 다음과 같습니다.
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +----+ 6 rows in set (0.00 sec)
첫 번째 테이블에는 총 6개의 행이 저장되어 있습니다.
두 번째 테이블 생성 및 데이터 삽입
이번에는 두 번째 테이블을 만듭니다.
mysql> CREATE TABLE DemoTable2
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.64 sec)레코드를 삽입합니다.
mysql> INSERT INTO DemoTable2 values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable2 values('David');
Query OK, 1 row affected (0.31 sec)저장된 데이터를 확인합니다.
mysql> SELECT * FROM DemoTable2;
실행 결과입니다.
+-------+ | Name | +-------+ | Chris | | David | +-------+ 2 rows in set (0.00 sec)
두 번째 테이블에는 2개의 행이 있습니다.
여러 테이블의 행 개수를 한 번에 조회하는 쿼리
이제 앞서 소개한 서브쿼리 방식으로 두 테이블의 행 개수를 동시에 조회해 보겠습니다.
mysql> SELECT
-> (SELECT COUNT(*) FROM DemoTable1) AS FirstTable1Count,
-> (SELECT COUNT(*) FROM DemoTable2) AS SecondTable2Count
-> FROM dual;실행 결과는 다음과 같습니다.
+---------------------+----------------------+ | FirstTable1Count | SecondTable2Count | +---------------------+----------------------+ | 6 | 2 | +---------------------+----------------------+ 1 row in set (0.00 sec)
정리
이처럼 SELECT 절 안에 각 테이블별 COUNT(*) 서브쿼리를 나열하면, 여러 번 쿼리를 실행하지 않고도 한 번의 요청으로 모든 테이블의 행 개수를 얻을 수 있습니다. 테이블이 세 개 이상인 경우에도 같은 방식으로 서브쿼리를 추가하기만 하면 되므로, 대시보드나 통계 조회 등 여러 테이블의 레코드 수를 함께 보여줘야 하는 상황에서 매우 유용하게 활용할 수 있습니다.