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

MySQLでデータベースを作成日順にソートして表示するクエリの書き方

MySQLでは、ORDER BY句を活用することで、データベースを作成日順に並べて表示できます。まずは、サーバー上のすべてのデータベースを一覧表示する基本のコマンドから見ていきましょう。

すべてのデータベースを表示する

mysql> show databases;

このコマンドを実行すると、以下のように登録されている全データベースが出力されます。

+---------------------------+
| Database                  |
+---------------------------+
| bothinnodbandmyisam       |
| business                  |
| commandline               |
| customer_tracker_database |
| customertracker           |
| database1                 |
| databasesample            |
| demo                      |
| education                 |
| hb_student_tracker        |
| hello                     |
| information_schema        |
| javadatabase2             |
| javasampledatabase        |
| mybusiness                |
| mydatabase                |
| mysql                     |
| onetomanyrelationship     |
| performance_schema        |
| rdb                       |
| sample                    |
| sampledatabase            |
| schemasample              |
| sys                       |
| test                      |
| test3                     |
| tracker                   |
| universitydatabase        |
| web                       |
| webtracker                |
+---------------------------+
30 rows in set (0.00 sec)

作成日順にデータベースを表示するクエリ

SHOW DATABASESコマンド自体にはソート機能がなく、作成日の情報も表示されません。そこで活躍するのが、MySQLに標準搭載されている情報スキーマ「INFORMATION_SCHEMA.TABLES」です。このテーブルには各テーブルの作成日時や更新日時などのメタデータが格納されており、これを集計することでデータベース単位の作成日を求められます。

以下のクエリを実行すると、各データベースの作成日時と更新日時を取得し、作成日の新しい順に並べ替えて表示できます。

mysql> SELECT
    -> TABLE_SCHEMA AS ALL_DATABASE_NAME,
    -> MAX(create_time) AS creationTime,
    -> MAX(update_time) updatingTime
    -> FROM INFORMATION_SCHEMA.TABLES
    -> GROUP BY ALL_DATABASE_NAME
    -> ORDER BY creationTime DESC;

クエリのポイントは次の通りです。

  • TABLE_SCHEMA AS ALL_DATABASE_NAME:テーブルが属するデータベース名を取得します。
  • MAX(create_time):データベース内のテーブル作成日時の最大値を取得し、データベースの作成日として扱います。
  • MAX(update_time):最終更新日時を併せて確認できるようにしています。
  • GROUP BY ALL_DATABASE_NAME:データベース名ごとに結果をグループ化します。
  • ORDER BY creationTime DESC:作成日の降順(新しい順)にソートします。

実行結果は以下のようになります。

+---------------------+---------------------+---------------------+
| ALL_DATABASE_NAME   | creationTime        | updatingTime        |
+---------------------+---------------------+---------------------+
| test                | 2019-04-03 11:37:58 | 2019-04-03 11:38:55 |
| hb_student_tracker  | 2019-03-19 03:54:32 | NULL                |
| sample              | 2019-03-15 00:04:29 | 2019-03-08 16:06:09 |
| test3               | 2019-03-12 20:29:12 | NULL                |
| mysql               | 2019-02-26 07:10:49 | 2019-04-03 11:38:56 |
| demo                | 2019-02-19 03:27:40 | NULL                |
| tracker             | 2019-02-14 19:49:55 | NULL                |
| bothinnodbandmyisam | 2019-02-06 14:32:26 | 2019-02-05 18:11:14 |
| commandline         | 2019-01-30 21:21:56 | NULL                |
| rdb                 | 2019-01-03 19:37:43 | NULL                |
| business            | 2019-01-02 17:32:17 | 2018-12-10 17:53:02 |
| education           | 2018-10-06 15:07:29 | NULL                |
| information_schema  | 2018-09-23 02:09:14 | NULL                |
| sys                 | 2018-09-23 02:09:03 | NULL                |
| performance_schema  | 2018-09-23 02:08:01 | NULL                |
+---------------------+---------------------+---------------------+
15 rows in set (0.05 sec)

このように、INFORMATION_SCHEMAを活用すれば、SHOW DATABASESだけでは分からない作成日や更新日といった詳細なメタデータを簡単に確認できます。データベースの管理や整理を行う際にぜひ活用してみてください。

  1. MySQLで日付型カラムにNULLを挿入する方法|ALTER TABLEによるカラム定義の変更手順

    日付型(DATE)カラムにNULLを挿入したい場合、ALTER TABLE文とMODIFY句を使って、カラム定義をNULL許可に変更する必要があります。基本の構文alter table テーブル名 modify column カラム名 date NULL;既存のテーブル構造はそのままに、指定したカラムだけをNULLを許容する形へ変更できます。検証用テーブルを作成するまず、日付カラムをNOT NULLとして定義したテーブルを作成します。mysql> create table DemoTable ( ShippingDate date NOT NULL ); Query OK, 0

  2. MySQLでNULL値を1として表示・更新する方法

    MySQLでは、テーブル内のNULL値を別の値(たとえば「1」)に置き換えて扱いたい場面があります。この記事では、IFNULL関数とUPDATE文を組み合わせて、NULL値を1に変換する具体的な手順をサンプルコード付きで解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable1963 ( Counter int ); Query OK, 0 rows affected (0.00 sec) 2. レコードを挿入する INSERT文を使って、NULLを含む複数のレコードを