【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を行わずに複数データベース・複数テーブルの統計情報を効率的に取得できます。監視用ダッシュボードやレポート作成などでも活用できる便利なテクニックなので、ぜひ覚えておきましょう。
-
単一のMySQLクエリで複数のテーブルからNOT NULL値をカウントする方法
MySQLでは、スカラーサブクエリを組み合わせることで、単一のクエリで複数のテーブルからNOT NULL値の件数を同時に取得できます。COUNT関数はNULL値を自動的に除外するため、この方法はNULLを含むカラムの有効な値の数を数えるのに非常に便利です。基本構文複数のテーブルから値をカウントする場合、基本的な構文は以下の通りです。Select ( select count(yourColumnName) from yourTableName1) as anyAliasName1, ( select count(yourColumnName) from your
-
MySQLで1つのクエリを使ってSELECTとINSERTを同時に実行する方法
MySQLでは、INSERT INTO ... SELECT構文とUNION ALLを組み合わせることで、1つのクエリだけで別テーブルからデータを選択(SELECT)し、挿入(INSERT)することができます。本記事では、実際のサンプルコードを使ってその手順をわかりやすく解説します。1. 最初のテーブルを作成するまず、データの挿入先となる最初のテーブルを作成します。以下のクエリを実行してください。mysql> create table DemoTable1 -> ( -> StudentName varchar(20), -> StudentMarks