MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【MySQL】1つのクエリで異なるデータベースの2つのテーブルの行数を同時に取得する方法

異なるデータベースに存在する複数のテーブルの行数(レコード数)を、1回のクエリでまとめて取得したいケースは意外と多くあります。このような場合には、集計関数 COUNT(*) とスカラーサブクエリを組み合わせることで簡単に実現できます。

この記事では、実際にテーブルを作成しながら、その手順をわかりやすく解説します。

準備:最初のデータベース「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)

別のデータベース「test」に2つ目のテーブルを作成する

次に、別のデータベース「test」内に2つ目のテーブル 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)

SELECT文で内容を確認します。

mysql> select *from DemoTable2;

出力結果

+-------+
| Value |
+-------+
|   100 |
|   200 |
+-------+
2 rows in set (0.00 sec)

1つのクエリで両テーブルの行数を取得する

それでは本題です。異なるデータベースに属する2つのテーブルの行数を、1回のクエリで同時に取得してみましょう。ポイントは、「データベース名.テーブル名」の形式でテーブルを指定することと、SELECT句の中にサブクエリを記述することです。

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)

解説のポイント

  • COUNT(*)関数: テーブル内の全行数をカウントする集計関数です。
  • スカラーサブクエリ: SELECT句の中に記述されたサブクエリは、単一の値を返すため、各テーブルの行数を1つの列として取得できます。
  • AS句による別名付け: 結果の列名を「Table1Count」「Table2Count」として見やすく表示しています。

この手法を使えば、JOINを行わずに複数データベース・複数テーブルの統計情報を効率的に取得できます。監視用ダッシュボードやレポート作成などでも活用できる便利なテクニックなので、ぜひ覚えておきましょう。

  1. 単一のMySQLクエリで複数のテーブルからNOT NULL値をカウントする方法

    MySQLでは、スカラーサブクエリを組み合わせることで、単一のクエリで複数のテーブルからNOT NULL値の件数を同時に取得できます。COUNT関数はNULL値を自動的に除外するため、この方法はNULLを含むカラムの有効な値の数を数えるのに非常に便利です。基本構文複数のテーブルから値をカウントする場合、基本的な構文は以下の通りです。Select ( select count(yourColumnName) from yourTableName1) as anyAliasName1, ( select count(yourColumnName) from your

  2. MySQLで1つのクエリを使ってSELECTとINSERTを同時に実行する方法

    MySQLでは、INSERT INTO ... SELECT構文とUNION ALLを組み合わせることで、1つのクエリだけで別テーブルからデータを選択(SELECT)し、挿入(INSERT)することができます。本記事では、実際のサンプルコードを使ってその手順をわかりやすく解説します。1. 最初のテーブルを作成するまず、データの挿入先となる最初のテーブルを作成します。以下のクエリを実行してください。mysql> create table DemoTable1 -> ( -> StudentName varchar(20), -> StudentMarks