MySQL에서 두 개 이상의 테이블에 저장된 행(row) 수를 한 번의 쿼리로 확인해야 하는 경우가 종종 있습니다. 이 글에서는 서브쿼리(subquery)와 COUNT(*)를 활용해 여러 테이블의 행 수를 동시에 계산하는 방법을 단계별로 살펴보겠습니다.
1단계: 첫 번째 테이블 생성
먼저 DemoTable1이라는 이름의 테이블을 생성합니다.
mysql> create table DemoTable1 (FirstName varchar(100));
Query OK, 0 rows affected (0.54 sec)
레코드 삽입
insert 명령어를 사용해 테이블에 데이터를 추가합니다.
mysql> insert into DemoTable1 values('Bob');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1 values('James');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1 values('John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1 values('David');
Query OK, 1 row affected (0.18 sec)레코드 조회
select 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable1;
실행 결과는 다음과 같습니다.
+-----------+
| FirstName |
+-----------+
| Bob |
| James |
| John |
| David |
+-----------+
4 rows in set (0.00 sec)
DemoTable1에는 총 4개의 행이 저장되어 있습니다.
2단계: 두 번째 테이블 생성
이번에는 점수를 저장할 DemoTable2 테이블을 생성합니다.
mysql> create table DemoTable2 (Marks int);
Query OK, 0 rows affected (0.65 sec)
레코드 삽입
마찬가지로 insert 명령어로 데이터를 추가합니다.
mysql> insert into DemoTable2 values(98);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable2 values(89);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable2 values(67);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable2 values(34);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable2 values(32);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable2 values(42);
Query OK, 1 row affected (0.17 sec)
레코드 조회
mysql> select *from DemoTable2;
실행 결과는 다음과 같습니다.
+-------+
| Marks |
+-------+
| 98 |
| 89 |
| 67 |
| 34 |
| 32 |
| 42 |
+-------+
6 rows in set (0.00 sec)
DemoTable2에는 총 6개의 행이 저장되어 있습니다.
여러 테이블의 행 수를 한 번에 계산하는 쿼리
이제 핵심 부분입니다. 메인 SELECT 문 안에 각 테이블별로 COUNT(*)를 수행하는 서브쿼리를 배치하면, 여러 테이블의 행 수를 동시에 조회할 수 있습니다.
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)
쿼리 동작 원리
- 스칼라 서브쿼리: SELECT 절 안에서
(select count(*) from 테이블명)형태의 서브쿼리가 각 테이블의 전체 행 수를 반환합니다. - AS 별칭: AS 키워드를 사용해 결과 컬럼에 First_Table_Row, Second_Table_Row처럼 의미 있는 이름을 지정해 가독성을 높입니다.
- 확장성: 세 번째, 네 번째 테이블도 같은 패턴으로 서브쿼리를 나열하기만 하면 되므로 확장이 매우 간단합니다.
이 방법은 UNION이나 JOIN 없이도 단일 쿼리로 여러 테이블의 통계 정보를 빠르게 얻을 수 있어, 대시보드나 데이터 요약 보고서를 만들 때 실무에서 특히 유용하게 활용됩니다.