SQLでテーブル一覧を取得する方法|DB別コマンド完全ガイド
CONTENTS
「SQLでテーブル一覧を取得したいけど、DBごとに書き方が違ってわからない」
「本番DBと設計書の差分を確認したいが、どこから手を付けるべきか迷う」
こうした悩みを抱えるエンジニアは非常に多いです。
実務では、テーブル一覧の取得は単なる確認作業ではなく、以下のような重要な工程の“起点”になります。
- システム移行・リプレース
- データベース設計の棚卸し
- 影響範囲調査(改修・障害対応)
- パフォーマンスチューニング
この記事では、
- DB共通で使えるSQL(INFORMATION_SCHEMA)
- MySQL / PostgreSQL / Oracle / SQL Server / SQLite別の取得方法
- 実務で差が出る「行数・DDL・カラム取得」までの応用
- よくある失敗と回避策
を体系的に解説します。
初心者でも理解でき、実務経験者も納得できるレベルまで深掘りしています。
テーブル一覧取得の前に必ず確認すべきポイント
テーブル一覧取得で最も多いミスは「SQLの書き方」ではありません。
接続先とスキーマの取り違えです。
確認すべき3つのポイント
① 接続しているデータベース
- 同一サーバー内に複数DBがあるケースが多い
- 本番・検証・開発の取り違えは重大事故につながる
② 対象スキーマ
- 同名テーブルが別スキーマに存在することがある
- PostgreSQLやOracleでは特に重要
③ 対象範囲(テーブル or ビュー)
- テーブルだけ必要なのか
- ビューも含めるのか
👉 この3点を曖昧にしたまま進めると、
後工程で必ず手戻りが発生します。
共通SQL:INFORMATION_SCHEMAで一覧取得
DBをまたいで使える最も汎用的な方法が
INFORMATION_SCHEMA です。
基本構文
SELECT table_schema, table_name
FROM information_schema.tables
WHERE table_schema = '対象スキーマ'
ORDER BY table_name;
よく使うカラム
table_schema:スキーマ名table_name:テーブル名table_type:BASE TABLE / VIEW
実務で使うテンプレ
SELECT table_schema, table_name, table_type
FROM information_schema.tables
WHERE table_schema = '対象スキーマ'
AND table_type = 'BASE TABLE'
ORDER BY table_name;
ポイント
- 必ずスキーマを指定する
- table_typeで絞り込む
- LIKE検索は慎重に(性能影響あり)
👉 INFORMATION_SCHEMAは
「環境が変わっても使える」最強の基盤スキルです。
DB別:テーブル一覧の取得方法
MySQL
最短コマンド
SHOW TABLES;
SQLで取得
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'db名'
AND table_type = 'BASE TABLE';
実務ポイント
USE db名;を忘れがち- SHOWは簡単だが再利用しにくい
PostgreSQL
SELECT relname AS table_name
FROM pg_stat_user_tables
ORDER BY relname;
ポイント
- public以外のスキーマに注意
- search_path依存は危険
Oracle
SELECT table_name FROM user_tables;
種類別
- USER_TABLES:自分のテーブル
- ALL_TABLES:参照可能な全テーブル
- DBA_TABLES:DB全体
👉 スキーマ(OWNER)確認は必須
SQL Server
SELECT name
FROM sys.objects
WHERE type = 'U';
ポイント
- type='U' → ユーザーテーブル
- スキーマ指定が重要
SQLite
SELECT name
FROM sqlite_master
WHERE type = 'table';
注意点
sqlite_で始まる内部テーブルを除外
実務で差がつく:付加情報の取得
テーブル一覧だけでは不十分です。
行数の取得
用途:
- 移行工数見積り
- データ量分析
注意:
- DBによっては概算値
最終更新日時
多くのDBでは自動取得不可
対応方法:
updated_atカラムを利用- トリガーで記録
- 監査ログ導入
CREATE TABLE(DDL)の取得方法
設計差分を確認するにはDDLが必須です。
代表例
- MySQL
SHOW CREATE TABLE テーブル名;
- PostgreSQL
pg_dump -s
- Oracle
DBMS_METADATA.GET_DDL
👉 DDL確認は「移行」ではなく
「差分理解」が目的です。
カラム一覧の取得(影響調査に必須)
SELECT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = '対象スキーマ';
活用例
- カラム横断検索
- 型不一致チェック
- 仕様書代替
SQL以外の方法(高速確認)
代表コマンド
PostgreSQL
\dt
MySQL
SHOW TABLES;
SQLite
.tables
使い分け
| 方法 | 用途 |
|---|---|
| CLI | 一次調査 |
| SQL | 共有・再現 |
よくある失敗と対策
① テーブルが見つからない
原因:
- DB違い
- スキーマ違い
対策:
👉 接続先確認が最優先
② ビューが混ざる
原因:
- table_type未指定
対策:
AND table_type = 'BASE TABLE'
③ 同名テーブルの誤認
対策:
👉 スキーマ名を必ず出力
④ パフォーマンス問題
原因:
- LIKE '%xxx%'
対策:
👉 前方一致を優先
参考・公式情報(信頼性向上)
- MySQL公式
https://dev.mysql.com/doc/refman/8.0/en/information-schema-tables-table.html - PostgreSQL公式
https://www.postgresql.org/docs/current/catalogs.html - Oracle公式
https://docs.oracle.com/en/database/ - SQL Server公式
https://learn.microsoft.com/en-us/sql/
👉 仕様差分は必ず公式で確認するのがプロの基本です。
まとめ
テーブル一覧取得のポイントはシンプルです。
- 接続DB・スキーマを最初に確認
- INFORMATION_SCHEMAを基本にする
- DBごとの最短手段も使い分ける
- 行数・DDL・カラム取得まで拡張する
👉 この流れを理解すれば、
DB調査・移行・設計レビューの精度が一段上がります。
次のステップ
ここまで読んでいただいた方は、
- SQLを「書ける」から「使いこなせる」段階に入りつつあります
- データベース設計・移行・最適化といった上流工程に興味が出ているはずです
私たちのチームでも、
- DB設計・パフォーマンス改善
- WordPress / 検索基盤(Fess / Solr)
- 大規模データ運用
といった領域に強い関心を持つエンジニアを探しています。
もし「技術を実務でさらに深めたい」と感じているなら、
同じ志向を持つメンバーと一緒に成長できる環境があります。
無理な勧誘はしませんが、
あなたのスキルが活きる場所を一度覗いてみてください。
学んだSQLを、実務で使えるスキルにしたい方へ
本記事ではSQLの基本的な考え方や使い方を解説しましたが、
「実務で使えるレベルまで身につけたい」と感じた方も多いのではないでしょうか。
SQLは、文法を理解するだけでなく、
- どんなデータ構造で使われるのか
- どんなクエリが現場で求められるのか
を意識して学ぶことで、実践力が大きく変わります。
そうした「実務を見据えたSQL学習」を進めたい方には、
完全無料で学べるプログラミングスクール ZeroCode PLUS という選択肢もあります。
- SQLを含むWeb・データベース系スキルを体系的に学べる
- 未経験者でも実務を意識したカリキュラム
- 受講料・教材費がかからない完全無料の学習環境
- 完全オンラインでスキマ学習
※学習内容や進め方を確認するだけでもOKです