MySQL에서 서로 다른 데이터베이스에 존재하는 두 테이블의 행 수(row count)를 하나의 쿼리로 확인해야 하는 경우가 있습니다. 이때는 집계 함수 COUNT(*)를 활용하면 간단하게 해결할 수 있습니다.
아래 예제에서는 web과 test라는 두 개의 데이터베이스에 각각 테이블을 만들고, 단일 쿼리로 두 테이블의 행 수를 동시에 조회하는 방법을 살펴보겠습니다.
1. 첫 번째 데이터베이스(web)에 테이블 생성
먼저 'web' 데이터베이스에 DemoTable1이라는 테이블을 생성합니다.
mysql> create table DemoTable1
-> (
-> Value int
-> );
Query OK, 0 rows affected (0.60 sec)
레코드 삽입
insert 명령을 사용하여 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1 values(10);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1 values(20);
Query OK, 1 row affected (0.15 sec)
레코드 확인
select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable1;
출력 결과
+-------+
| Value |
+-------+
| 10 |
| 20 |
+-------+
2 rows in set (0.00 sec)
2. 두 번째 데이터베이스(test)에 테이블 생성
이번에는 'test'라는 이름의 다른 데이터베이스에 DemoTable2 테이블을 생성합니다.
mysql> create table DemoTable2
-> (
-> Value int
-> );
Query OK, 0 rows affected (0.68 sec)
레코드 삽입
마찬가지로 insert 명령을 사용하여 레코드를 추가합니다.
mysql> insert into DemoTable2 values(100);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable2 values(200);
Query OK, 1 row affected (0.15 sec)
레코드 확인
mysql> select *from DemoTable2;
출력 결과
+-------+
| Value |
+-------+
|100 |
|200 |
+-------+
2 rows in set (0.00 sec)
3. 단일 쿼리로 두 테이블의 행 수 조회하기
핵심은 스칼라 서브쿼리(scalar subquery)를 활용하는 것입니다. 데이터베이스명.테이블명 형식으로 각 테이블을 지정하여 COUNT(*)를 실행하면, 하나의 쿼리에서 두 테이블의 행 수를 동시에 얻을 수 있습니다.
mysql> select
-> (
-> select count(*) from web.DemoTable1) AS Table1Count,
-> (select count(*) from test.DemoTable2) AS Table2Count;
출력 결과
+---------------+---------------+
| Table1Count | Table2Count |
+---------------+---------------+
| 2 | 2 |
+---------------+---------------+
1 row in set (0.06 sec)
정리
위 예제에서 볼 수 있듯이, SELECT 절 안에 여러 개의 스칼라 서브쿼리를 배치하고 각 서브쿼리에서 데이터베이스명.테이블명 형식으로 대상 테이블을 지정하면 됩니다. 이 방법은 조인 없이도 서로 다른 데이터베이스에 있는 테이블들의 통계 정보를 한 번에 확인할 수 있어 매우 유용합니다. AS 키워드를 사용하면 결과 컬럼에 원하는 별칭(alias)을 부여할 수 있어 가독성도 높아집니다.