MySQLで複数のデータベースにまたがるテーブルの総行数を取得する方法
複数のデータベースに存在する同名テーブルの総行数を取得したい場合は、集計関数 SUM() と INFORMATION_SCHEMA を組み合わせることで実現できます。ここでは、実際にサンプルを作成しながら手順を解説します。
1. 「web」データベースにテーブルを作成する
まずは「web」データベース内にテーブルを作成します。以下のコマンドを実行してください。
mysql> create table DemoTable1568
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.61 sec)
INSERT コマンドを使って、いくつかのレコードを挿入します。
mysql> insert into DemoTable1568 values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1568 values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1568 values('David');
Query OK, 1 row affected (0.13 sec)
SELECT 文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1568;
実行すると、以下のような結果が出力されます。
+-------+ | Name | +-------+ | Chris | | Bob | | David | +-------+ 3 rows in set (0.00 sec)
この時点で「web」データベース側には3件のレコードが登録されました。
2. 「sample」データベースに同じ名前のテーブルを作成する
次に、別のデータベース「sample」に移動し、同じ名前のテーブルを作成します。
mysql> use sample;
Database changed
mysql> create table DemoTable1568
-> (
-> Id int
-> );
Query OK, 0 rows affected (0.99 sec)
こちらにもレコードを挿入していきます。
mysql> insert into DemoTable1568 values(101); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1568 values(102); Query OK, 1 row affected (0.34 sec) mysql> insert into DemoTable1568 values(103); Query OK, 1 row affected (0.29 sec) mysql> insert into DemoTable1568 values(104); Query OK, 1 row affected (0.14 sec)
SELECT 文で内容を確認します。
mysql> select * from DemoTable1568;
出力結果は以下の通りです。
+------+ | Id | +------+ | 101 | | 102 | | 103 | | 104 | +------+ 4 rows in set (0.00 sec)
これで「sample」データベース側には4件のレコードが登録されました。
3. 複数データベースにまたがる総行数を取得するクエリ
それでは本題です。information_schema.tables を参照し、テーブル名で条件を絞り込んだ上で SUM(table_rows) を使うことで、複数のデータベースにまたがる同一テーブルの総行数を一度に取得できます。
mysql> select sum(table_rows) as TotalNumberOfRows from information_schema.tables
-> where table_name='DemoTable1568';
実行結果は以下の通りです。
+-------------------+ | TotalNumberOfRows | +-------------------+ | 7 | +-------------------+ 1 row in set (0.19 sec)
「web」データベースの3件と「sample」データベースの4件を合算した7行という結果が得られました。このように INFORMATION_SCHEMA の TABLES テーブルを活用すれば、個別に COUNT() を実行して手作業で足し合わせることなく、複数データベースに分散したテーブルの行数を効率的に把握できます。
補足: InnoDB テーブルの場合、table_rows の値は概算値となる点に注意してください。正確な行数が必要な場合は、各テーブルに対して個別に COUNT(*) を実行することをおすすめします。
-
MySQLのINSERT INTO SELECT文で複数のテーブルからレコードを挿入する方法
複数のテーブルからレコードを挿入するには、INSERT INTO ... SELECT 文を使用します。この記事では、2つのテーブルのデータを組み合わせて、別のテーブルへレコードを挿入する手順を、実際の実行例とともに解説します。 1つ目のテーブルを作成する まず、挿入元となる1つ目のテーブルを作成しましょう。 mysql> create table DemoTable1943 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec) サンプルデータを挿入する INSERTコマンドを使って、テーブルにレコー
-
MySQLで複数テーブルにまたがる結果の総数を制限する方法
UNION ALLとLIMITを組み合わせて結果の総数を制限する複数のテーブルにまたがる検索結果の合計件数を制限したい場合は、UNION ALLとLIMITを組み合わせることで実現できます。この記事では、例として3つのテーブルを作成し、それぞれの結果を結合した上で全体の件数を制限する手順を具体的に解説します。1つ目のテーブル(demo3)を作成するまず、次のクエリで最初のテーブルを作成します。mysql> create table demo3 -> ( -> value int -> ); Query OK, 0 rows affected (1.39 sec)続いて、