MySQL – 1つのクエリでデータベース内の全テーブルの行数を一括取得する方法
MySQLでは、INFORMATION_SCHEMA.TABLES を参照することで、1つのクエリだけでデータベース内のすべてのテーブルの行数を一括して取得できます。テーブルごとに個別に SELECT COUNT(*) を実行する必要はありません。
基本の構文
集計カラム TABLE_ROWS を利用し、対象のデータベース名を TABLE_SCHEMA 条件で指定します。
SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'yourDatabaseName';
実行例
ここでは「business」というデータベースに対して実行してみます。
mysql> SELECT TABLE_NAME, TABLE_ROWS
-> FROM INFORMATION_SCHEMA.TABLES
-> WHERE TABLE_SCHEMA = 'business';出力結果(抜粋)
+--------------------------+------------+ | TABLE_NAME | TABLE_ROWS | +--------------------------+------------+ | accentsearchdemo | 2 | | add1daydemo | 2 | | addcheckconstraintdemo | 0 | | autoincrement | 4 | | bookindexes | 4 | | deletedemo | 5 | | deleterecord | 6 | | distinctdemo | 8 | | employeeinformation | 2 | | limitoffsettable | 13 | | randoptimizedemo | 26 | | ... | ... | +--------------------------+------------+
このように、データベースに存在する全テーブルの名前とおおよその行数が一覧形式で返されます。テーブル数が多い場合は ORDER BY TABLE_ROWS DESC を追加すると、行数の多いテーブルから順に確認できて便利です。
注意点:TABLE_ROWSは概算値になる場合がある
InnoDBテーブルの場合、TABLE_ROWS は統計情報に基づく概算値であり、実際の正確な行数と異なることがあります。MyISAMテーブルでは正確な値が返されますが、InnoDBでは厳密な件数が必要なケースには向きません。
正確な行数を取得したい場合
テーブル数が少なければ、UNION ALL で組み合わせる方法があります。
SELECT 'table1' AS table_name, COUNT(*) AS row_count FROM table1 UNION ALL SELECT 'table2', COUNT(*) FROM table2;
テーブル数が多い場合は、次のクエリで動的にCOUNT文を生成し、その結果を実行すると効率的です。
SELECT CONCAT( 'SELECT ''', table_name, ''' AS table_name, ', 'COUNT(*) AS row_count FROM `', table_name, '` UNION ALL' ) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'yourDatabaseName';
まとめ
- 手軽に全体像を把握したい →
INFORMATION_SCHEMA.TABLESのTABLE_ROWSを参照(概算) - 正確な件数が必要 → 各テーブルに対して
COUNT(*)を実行(UNION ALLや動的SQLで自動化可能)
用途に応じて使い分けることで、データベースの規模把握やメンテナンス作業を効率化できます。
-
MySQLの1つのクエリで複数テーブルの行数を同時にカウントする方法
はじめに MySQLでは、サブクエリ(スカラーサブクエリ)を組み合わせることで、1つのSELECT文で複数のテーブルの行数を同時に取得できます。この記事では、実際にテーブルを作成し、データを挿入して、2つのテーブルの行数を1回のクエリでカウントする手順を解説します。 手順1:1つ目のテーブルを作成する まず、以下のようにテーブルを作成します。 mysql> create table DemoTable1 ( Name varchar(40) ); Query OK, 0 rows affected (0.81 sec) レコードの挿入 INSERTコマンドを使って、いくつかの
-
MySQLで1つのテーブルから別のテーブルに行をコピーする方法【INSERT INTO SELECT文の使い方】
MySQLでテーブル間の行コピーを実現する方法MySQLであるテーブルから別のテーブルへ行(レコード)をコピーしたい場合は、INSERT INTO SELECT文を使用します。この文を使えば、SELECT句で取得したデータをそのまま別のテーブルに挿入できるため、WHERE句による条件指定と組み合わせれば、必要な行だけを効率よくコピーすることも可能です。ここでは、実際にサンプルテーブルを作成し、行をコピーする手順を順番に解説します。手順1:コピー元のテーブルを作成するまず、コピー元となるテーブル「DemoTable1879」を作成します。mysql> create table DemoTa