UNION ALL로 여러 테이블의 레코드 수 합산하기
MySQL에서 두 개 이상의 테이블에 저장된 전체 레코드 수를 한 번의 쿼리로 구하고 싶다면 UNION ALL을 활용하면 됩니다. 각 테이블에서 count(*)를 조회한 뒤, 서브쿼리 결과를 sum()으로 묶어 합산하는 방식입니다.
기본 문법
select sum(variableName.aliasName)
from
(
select count(*) as yourAliasName from yourTableName1
UNION ALL
select count(*) as yourAliasName from yourTableName2
) yourVariableName;이제 실제 예제를 통해 위 문법을 살펴보겠습니다. 여러 개의 테이블을 포함한 샘플 데이터베이스를 사용하며, 이번 예제에서는 다음 두 테이블을 사용합니다.
- userdemo
- wheredemo
예제 테이블 확인하기
먼저 'userdemo' 테이블의 모든 레코드를 조회하는 쿼리는 다음과 같습니다.
mysql> select *from userdemo;
실행 결과는 아래와 같습니다.
+--------+----------+------------------+ | UserId | UserName | RegisteredCourse | +--------+----------+------------------+ | 1 | John | Java | | 2 | Larry | C | | 3 | Carol | C++ | | 4 | Mike | C# | +--------+----------+------------------+ 4 rows in set (0.08 sec)
다음은 'wheredemo' 테이블의 레코드를 조회하는 쿼리입니다.
mysql> select *from wheredemo;
실행 결과는 아래와 같습니다.
+------+---------+ | Id | Name | +------+---------+ | 101 | Maxwell | | 110 | David | | 1000 | Carol | | 1100 | Bob | | 115 | Sam | +------+---------+ 5 rows in set (0.20 sec)
두 테이블의 count(*) 합산 쿼리 실행하기
위 두 테이블의 레코드 수를 한 번에 구하는 쿼리는 다음과 같습니다.
mysql> select sum(tbl.EachTableCount)
-> from
-> (
-> select count(*) as EachTableCount from userdemo
-> UNION ALL
-> select count(*) as EachTableCount from wheredemo
-> )tbl;실행 결과는 아래와 같습니다.
+-------------------------+ | sum(tbl.EachTableCount) | +-------------------------+ | 9 | +-------------------------+ 1 row in set (0.00 sec)
'userdemo' 테이블에는 4개, 'wheredemo' 테이블에는 5개의 레코드가 있으므로 최종 결과로 9가 반환됩니다. 이처럼 UNION ALL과 sum()을 조합하면 테이블이 몇 개든 전체 레코드 수를 손쉽게 집계할 수 있습니다.