こんにちは。
職人見習いの高嶋です。

MySQLやPostgreSQL、Oracleなどの様々なRDBMSが存在しますが、あるデータベース内のテーブルの一覧を取得する場合等にそれぞれコマンドが異なっていました。

例)今までのテーブル一覧情報の取得方法

■MySQL
SHOW TABLES;
■PostgreSQL
SELECT * FROM pg_tables;
■Oracle
SELECT * FROM TAB;

これらをSQLの標準規格であるSQL:2003(ISO/IEC 9075:2003)に定められ、共通したコマンドで管理・確認ができつつある情報スキーマを説明します。

情報スキーマとは、テーブルやユーザといった各種オブジェクトの情報(メタデータ)を参照するためのデータベースとテーブルであり、他のRDBMSでいうところの「データディクショナリ」や「システムカタログ」と同じようなものです。

情報スキーマはSELECT文を使うので、以下の利点があります。

  • 出力するカラムを選択する
  • WHERE句で条件を指定して絞り込む
  • ほかの情報スキーマのテーブルと結合する

例)情報スキーマによるテーブル一覧情報の取得方法

SELECT table_schema, table_name, table_type FROM information_schema.tables WHERE TABLE_SCHEMA = 'xxxx';

+--------------+----------------+------------+
| table_schema | TABLE_NAME     | TABLE_TYPE |
+--------------+----------------+------------+
| public       | hoge           | VIEW       |
| public       | fuga           | BASE TABLE |
+--------------+----------------+------------+

その他、情報スキーマ(MySQL5系)の一覧は以下の通りになります。

+---------------------------------------+---------------------------------+
|テーブル名               |説明                             |
+---------------------------------------+---------------------------------
|CHARACTER_SETS             |使用可能な文字コード             |
|COLLATIONS               |使用可能な照合順序               |
|COLLATION_CHARACTER_SET_APPLICABILITY |使用可能な照合順序               |
|COLUMNS                |各テーブルのカラム               |
|COLUMN_PRIVILEGES           |カラムの権限情報                 |
|KEY_COLUMN_USAGE            |カラムの制約の情報               |
|ROUTINES                |ストアドプロシージャなどの情報   |
|SCHEMATA                |データベースの情報               |
|SCHEMA_PRIVILEGES           |データベースの権限情報           |
|STATISTICS               |インデックスの情報               |
|TABLES                 |テーブルの情報                   |
|TABLE_CONSTRAINTS           |テーブルの制約の情報             |
|TABLE_PRIVILEGES            |テーブルの権限情報               |
|TRIGGERS                |トリガの情報                     |
|USER_PRIVILEGES            |ユーザの権限情報                 |
|VIEWS                 |ビューの情報                     |
+---------------------------------------+---------------------------------+

※この記事は、なかの人(piro556)が書いています。