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

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.TABLESTABLE_ROWS を参照(概算)
  • 正確な件数が必要 → 各テーブルに対して COUNT(*) を実行(UNION ALLや動的SQLで自動化可能)

用途に応じて使い分けることで、データベースの規模把握やメンテナンス作業を効率化できます。

  1. 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コマンドを使って、いくつかの

  2. MySQLで1つのテーブルから別のテーブルに行をコピーする方法【INSERT INTO SELECT文の使い方】

    MySQLでテーブル間の行コピーを実現する方法MySQLであるテーブルから別のテーブルへ行(レコード)をコピーしたい場合は、INSERT INTO SELECT文を使用します。この文を使えば、SELECT句で取得したデータをそのまま別のテーブルに挿入できるため、WHERE句による条件指定と組み合わせれば、必要な行だけを効率よくコピーすることも可能です。ここでは、実際にサンプルテーブルを作成し、行をコピーする手順を順番に解説します。手順1:コピー元のテーブルを作成するまず、コピー元となるテーブル「DemoTable1879」を作成します。mysql> create table DemoTa