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

단일 쿼리로 서로 다른 데이터베이스에 있는 두 테이블의 행 수 조회하기

MySQL에서 서로 다른 데이터베이스에 존재하는 두 테이블의 행 수(row count)를 하나의 쿼리로 확인해야 하는 경우가 있습니다. 이때는 집계 함수 COUNT(*)를 활용하면 간단하게 해결할 수 있습니다.


아래 예제에서는 webtest라는 두 개의 데이터베이스에 각각 테이블을 만들고, 단일 쿼리로 두 테이블의 행 수를 동시에 조회하는 방법을 살펴보겠습니다.


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)을 부여할 수 있어 가독성도 높아집니다.