Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 여러 테이블의 행 개수 한 번에 조회하는 방법 (COUNT(*) 활용)

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(*) 서브쿼리를 나열하면, 여러 번 쿼리를 실행하지 않고도 한 번의 요청으로 모든 테이블의 행 개수를 얻을 수 있습니다. 테이블이 세 개 이상인 경우에도 같은 방식으로 서브쿼리를 추가하기만 하면 되므로, 대시보드나 통계 조회 등 여러 테이블의 레코드 수를 함께 보여줘야 하는 상황에서 매우 유용하게 활용할 수 있습니다.