MEDIA

メディア

  1. TOP
  2. メディア
  3. プログラミング
  4. SQLでテーブル一覧を取得する方法|DB別コマンド完全ガイド

SQLでテーブル一覧を取得する方法|DB別コマンド完全ガイド

「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%'

対策:
👉 前方一致を優先

参考・公式情報(信頼性向上)

👉 仕様差分は必ず公式で確認するのがプロの基本です。

まとめ

テーブル一覧取得のポイントはシンプルです。

  • 接続DB・スキーマを最初に確認
  • INFORMATION_SCHEMAを基本にする
  • DBごとの最短手段も使い分ける
  • 行数・DDL・カラム取得まで拡張する

👉 この流れを理解すれば、

DB調査・移行・設計レビューの精度が一段上がります。

次のステップ

ここまで読んでいただいた方は、

  • SQLを「書ける」から「使いこなせる」段階に入りつつあります
  • データベース設計・移行・最適化といった上流工程に興味が出ているはずです

私たちのチームでも、

  • DB設計・パフォーマンス改善
  • WordPress / 検索基盤(Fess / Solr)
  • 大規模データ運用

といった領域に強い関心を持つエンジニアを探しています。

もし「技術を実務でさらに深めたい」と感じているなら、

同じ志向を持つメンバーと一緒に成長できる環境があります。

無理な勧誘はしませんが、

あなたのスキルが活きる場所を一度覗いてみてください。

学んだSQLを、実務で使えるスキルにしたい方へ

本記事ではSQLの基本的な考え方や使い方を解説しましたが、
「実務で使えるレベルまで身につけたい」と感じた方も多いのではないでしょうか。

SQLは、文法を理解するだけでなく、

  • どんなデータ構造で使われるのか
  • どんなクエリが現場で求められるのか

を意識して学ぶことで、実践力が大きく変わります。

そうした「実務を見据えたSQL学習」を進めたい方には、
完全無料で学べるプログラミングスクール ZeroCode PLUS という選択肢もあります。

  • SQLを含むWeb・データベース系スキルを体系的に学べる
  • 未経験者でも実務を意識したカリキュラム
  • 受講料・教材費がかからない完全無料の学習環境
  • 完全オンラインでスキマ学習


ZeroCode PLUSについて詳しく見る

※学習内容や進め方を確認するだけでもOKです

Join us! 未経験からエンジニアに挑戦できる環境で自分の可能性を信じてみよう 採用ページを見る→

記事監修

ドライブライン編集部

[ この記事をシェアする ]

記事一覧へ戻る