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

ソート順でテーブル一覧を表示する方法!SHOW TABLESに相当するMySQLクエリの書き方

MySQLでは通常SHOW TABLESコマンドを使ってデータベース内のテーブル一覧を確認できますが、このコマンドは結果をソートして表示する機能がありません。テーブル名をアルファベット順(昇順)に並べて表示したい場合は、INFORMATION_SCHEMA.TABLESビューを利用したSELECT文を使うのが効果的です。

INFORMATION_SCHEMA.TABLESとは

INFORMATION_SCHEMA.TABLESは、MySQLサーバーが管理しているすべてのデータベースとテーブルのメタ情報(スキーマ名・テーブル名・エンジンの種類など)を格納しているシステムビューです。ここからTABLE_NAMEカラムを選択すれば、テーブル一覧を自由に整形・ソートして取得できます。

基本構文

以下の構文を実行すると、指定したデータベース内のテーブル一覧を昇順(A→Z)で取得できます。

select TABLE_NAME from INFORMATION_SCHEMA.TABLES
where TABLE_SCHEMA= 'yourDatabaseName' order by TABLE_NAME;

ポイントは次の3つです。
TABLE_SCHEMAに調べたいデータベース名を指定する
ORDER BY TABLE_NAMEでテーブル名を基準に並べ替える
・降順にしたい場合は末尾にDESCを付けるだけです

実行例

ここでは「sample」というデータベースを対象に、SHOW TABLES相当のクエリを実行してみます。

mysql> select TABLE_NAME from INFORMATION_SCHEMA.TABLES
    -> where TABLE_SCHEMA= 'sample' order by TABLE_NAME;

このクエリを実行すると、次のような出力が得られます。

+------------------------------------+
| TABLE_NAME                         |
+------------------------------------+
| a                                  |
| accumulateddemo                    |
| add10minutedemo                    |
| add1toexistingvalue                |
| addanumbertocurrentvaluedemo       |
| addcolumnandindexdemo              |
| addingcurrentyeardemo              |
| addprefixtocolumndemo              |
| addtoexistingvaluedemo             |
| addtotaltimedemo                   |
| addwhereclausedemo                 |
| aggregatefunctiondemo              |
| allfiles                           |
| allownulldefaulnotnulldemo         |
| allrecordsexceptlastone            |
| ampmtimedisplaydemo                |
| autoincrementdemo                  |
| autoincrementtabledemo             |
| averagedemo                        |
| averagestring                      |
...(中略)...
| wheresetdemo                       |
| wildcarddemo                       |
| yesterdayrecordsdemo               |
| yourtable                          |
+------------------------------------+
342 rows in set (0.11 sec)

実行結果を見ると、テーブル名が「a」「accumulateddemo」「add10minutedemo」のようにアルファベット順にきちんとソートされていることが分かります。サンプルデータベースには合計342個のテーブルが存在し、それぞれが昇順で一覧表示されました。

補足:より便利な応用テクニック

INFORMATION_SCHEMA.TABLESを使うメリットは、単なる一覧表示にとどまらず、条件や整形を柔軟に組み合わせられる点です。

  • テーブル数を数えたい場合: select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='sample';
  • 特定の文字列を含むテーブルだけ抽出したい場合: where TABLE_SCHEMA='sample' and TABLE_NAME like '%demo%' を追加
  • 降順で表示したい場合: order by TABLE_NAME desc に変更

このように、INFORMATION_SCHEMA.TABLESを活用すれば、SHOW TABLESコマンドでは実現できないソート済みのテーブル一覧や絞り込み表示を簡単に行えます。大量のテーブルを管理しているデータベースでは特に役立つテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで複数テーブルの行数を1つのクエリでカウントする方法

    この記事では、MySQLで複数のテーブルの行数(レコード数)を1つのクエリだけで同時に取得する方法を解説します。鍵となるのは、SELECT文の中にサブクエリとしてCOUNT(*)を組み込むテクニックです。実際にサンプルテーブルを作りながら、動作を確認していきましょう。 手順1:最初のテーブルを作成する まず、サンプル用のテーブル「DemoTable1」を作成します。 mysql> create table DemoTable1 (FirstName varchar(100)); Query OK, 0 rows affected (0.54 sec) レコードを挿入する INSERT

  2. MySQLでORDER BY FIELD()を使って複数のID順にレコードを並べ替える方法

    MySQLでは、ORDER BY FIELD()を使用することで、任意のIDの順序に従ってレコードを並べ替えることができます。通常のORDER BY句は昇順・降順でのソートしか行えませんが、FIELD()関数と組み合わせることで、指定した値の並び順そのものをソート基準として利用できます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable( ClientId varchar(40), ClientName varchar(40) ); Query OK, 0 rows affected (0.55 s