단일 MySQL 쿼리로 두 테이블의 행 수 계산하기
MySQL에서 여러 테이블의 행(row) 수를 확인할 때 각각 별도의 쿼리를 실행할 수도 있지만, 스칼라 서브쿼리(scalar subquery)를 활용하면 단 하나의 쿼리로 두 테이블의 행 수를 동시에 조회할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.
1단계: 첫 번째 테이블 생성
먼저 DemoTable1이라는 이름의 테이블을 생성합니다.
mysql> create table DemoTable1
(
Name varchar(40)
);
Query OK, 0 rows affected (0.81 sec)insert 명령을 사용하여 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable1 values('Chris');
Query OK, 1 row affected (0.48 sec)
mysql> insert into DemoTable1 values('Robert');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1 values('Mike');
Query OK, 1 row affected (0.10 sec)select 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable1;
실행 결과는 다음과 같습니다.
+--------+ | Name | +--------+ | Chris | | Robert | | Mike | +--------+ 3 rows in set (0.00 sec)
2단계: 두 번째 테이블 생성
다음은 두 번째 테이블인 DemoTable2를 생성하는 쿼리입니다.
mysql> create table DemoTable2
(
Score int
);
Query OK, 0 rows affected (1.16 sec)마찬가지로 insert 명령으로 레코드를 삽입합니다.
mysql> insert into DemoTable2 values(86); Query OK, 1 row affected (0.22 sec) mysql> insert into DemoTable2 values(98); Query OK, 1 row affected (0.08 sec) mysql> insert into DemoTable2 values(75); Query OK, 1 row affected (0.14 sec)
select 문으로 모든 레코드를 조회합니다.
mysql> select *from DemoTable2;
실행 결과는 다음과 같습니다.
+-------+ | Score | +-------+ | 86 | | 98 | | 75 | +-------+ 3 rows in set (0.00 sec)
3단계: 단일 쿼리로 두 테이블의 행 수 계산
핵심은 SELECT 절 안에 각 테이블의 count(*)를 수행하는 서브쿼리를 배치하고, FROM dual을 지정하는 것입니다.
mysql> select
(select count(*) from DemoTable1) AS FirstTableCount,
(select count(*) from DemoTable2) AS SecondTableCount
from dual;위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------------+------------------+ | FirstTableCount | SecondTableCount | +-----------------+------------------+ | 3 | 3 | +-----------------+------------------+ 1 row in set (0.00 sec)
정리
SELECT 절에 스칼라 서브쿼리를 활용하면 JOIN 없이도 여러 테이블의 행 수를 한 번의 쿼리 실행으로 얻을 수 있습니다. MySQL에서 dual은 생략 가능한 더미 테이블이므로 FROM dual을 생략해도 동일하게 동작합니다. 또한 이 방식은 세 개 이상의 테이블에 대해서도 서브쿼리를 추가하는 형태로 손쉽게 확장할 수 있어, 대시보드나 통계 조회 등 여러 카운트를 한 번에 가져와야 하는 상황에서 특히 유용합니다.