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

단일 MySQL 쿼리로 두 테이블의 행 수를 한 번에 조회하는 방법

단일 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을 생략해도 동일하게 동작합니다. 또한 이 방식은 세 개 이상의 테이블에 대해서도 서브쿼리를 추가하는 형태로 손쉽게 확장할 수 있어, 대시보드나 통계 조회 등 여러 카운트를 한 번에 가져와야 하는 상황에서 특히 유용합니다.