この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:atom
更新日時:2026-06-11 07:07:02

タイトル: テーブル一覧を表示
SEOタイトル: DB テーブル一覧表示完全ガイド (MySQL/PostgreSQL/Oracle/SQL Server)

この記事の要点
  • MySQL: SHOW TABLES / SHOW TABLES FROM dbname / information_schema.tables
  • PostgreSQL: psql で \dt / \dt+ / pg_catalog.pg_tables
  • Oracle: USER_TABLES (自分) / ALL_TABLES (権限あり) / DBA_TABLES (管理者)
  • SQL Server: sys.tables / INFORMATION_SCHEMA.TABLES
  • 共通の標準: information_schema.tables はほぼ全 RDBMS で使える (Oracle 除く)

MySQL / MariaDB

基本: SHOW TABLES

-- 接続中の DB のテーブル一覧
SHOW TABLES;

-- 別 DB のテーブル一覧
SHOW TABLES FROM mydb;

-- ワイルドカードで絞り込み
SHOW TABLES LIKE 'user%';     -- user で始まる
SHOW TABLES LIKE '%_log';     -- _log で終わる

-- VIEW も含めるか
SHOW FULL TABLES;
-- +------------------+------------+
-- | Tables_in_mydb   | Table_type |
-- +------------------+------------+
-- | users            | BASE TABLE |
-- | active_users     | VIEW       |
-- +------------------+------------+

-- VIEW だけ
SHOW FULL TABLES WHERE Table_type = 'VIEW';

information_schema 経由 (標準 SQL に近い)

-- 全テーブル + 件数 + サイズ
SELECT
    TABLE_NAME,
    TABLE_ROWS,
    ROUND(DATA_LENGTH/1024/1024, 2) AS data_mb,
    ROUND(INDEX_LENGTH/1024/1024, 2) AS index_mb,
    ENGINE,
    TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'mydb'
ORDER BY DATA_LENGTH DESC;

-- カラム数の多いテーブル top10
SELECT TABLE_NAME, COUNT(*) AS cols
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'mydb'
GROUP BY TABLE_NAME
ORDER BY cols DESC
LIMIT 10;

-- 外部キー一覧
SELECT TABLE_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'mydb'
  AND REFERENCED_TABLE_NAME IS NOT NULL;

PostgreSQL

psql のメタコマンド

-- psql 接続後
\dt              -- public スキーマのテーブル
\dt+             -- サイズ・所有者付き
\dt *.*          -- 全スキーマ
\dt myschema.*   -- 特定スキーマ

\dv              -- VIEW 一覧
\di              -- インデックス
\ds              -- シーケンス
\d table_name    -- テーブル定義 (CREATE TABLE 相当)
\d+ table_name   -- 詳細 (サイズ・統計付き)

-- 出力をファイルに
\o tables.txt
\dt
\o

SQL クエリで取得

-- pg_catalog 経由 (PostgreSQL ネイティブ)
SELECT schemaname, tablename, tableowner
FROM pg_catalog.pg_tables
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
ORDER BY schemaname, tablename;

-- information_schema 経由 (標準 SQL)
SELECT table_schema, table_name, table_type
FROM information_schema.tables
WHERE table_schema NOT IN ('pg_catalog', 'information_schema');

-- サイズ付き (実用)
SELECT
    schemaname,
    relname AS table_name,
    pg_size_pretty(pg_total_relation_size(relid)) AS total_size,
    pg_size_pretty(pg_relation_size(relid))       AS table_size,
    n_live_tup AS row_count
FROM pg_stat_user_tables
ORDER BY pg_total_relation_size(relid) DESC;

Oracle

-- 自分が所有するテーブル
SELECT table_name FROM user_tables ORDER BY table_name;

-- 自分がアクセス可能な全テーブル (他スキーマ含む)
SELECT owner, table_name FROM all_tables
WHERE owner NOT IN ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP')
ORDER BY owner, table_name;

-- DBA 権限がある場合 (全テーブル)
SELECT owner, table_name FROM dba_tables;

-- VIEW
SELECT view_name FROM user_views;

-- サイズ・行数 (統計が必要)
SELECT table_name, num_rows, blocks * 8 / 1024 AS size_mb
FROM user_tables
ORDER BY num_rows DESC;

-- 統計再収集
EXEC DBMS_STATS.GATHER_SCHEMA_STATS(USER);

-- SQL*Plus 上で
DESC table_name;

SQL Server

-- sys.tables 経由
SELECT s.name AS schema_name, t.name AS table_name, t.create_date
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
ORDER BY s.name, t.name;

-- INFORMATION_SCHEMA 経由 (標準 SQL)
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';

-- サイズ・行数付き
EXEC sp_spaceused;             -- DB 全体
EXEC sp_spaceused 'dbo.users'; -- 個別テーブル

-- 動的: 全テーブルのサイズ一覧
SELECT
    t.NAME AS TableName,
    p.rows AS RowCounts,
    SUM(a.total_pages) * 8 / 1024 AS TotalSpaceMB
FROM sys.tables t
JOIN sys.indexes i ON t.OBJECT_ID = i.object_id
JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
JOIN sys.allocation_units a ON p.partition_id = a.container_id
WHERE i.index_id <= 1
GROUP BY t.NAME, p.rows
ORDER BY TotalSpaceMB DESC;

-- sqlcmd で
USE mydb;
EXEC sp_tables;

SQLite

-- sqlite3 コンソール
.tables
.schema table_name
.indexes table_name

-- SQL から
SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;
SELECT name FROM sqlite_master WHERE type='index';
SELECT sql  FROM sqlite_master WHERE name='users';

各 DB の対応表

DBテーブル一覧定義表示サイズ
MySQL / MariaDBSHOW TABLESDESC tbl / SHOW CREATE TABLE tblinformation_schema.TABLES
PostgreSQL\dt\d tblpg_total_relation_size()
OracleUSER_TABLESDESC tblUSER_SEGMENTS
SQL Serversys.tablessp_help 'tbl'sp_spaceused
SQLite.tables.schema tbl

クライアントツール GUI

  • MySQL Workbench / phpMyAdmin / DBeaver / HeidiSQL — MySQL/MariaDB
  • pgAdmin / DBeaver / Postico — PostgreSQL
  • SQL Developer / Toad / DBeaver — Oracle
  • SSMS / Azure Data Studio / DBeaver — SQL Server
  • DBeaverマルチ DB 対応で 1 本で済む

FAQ

Q: 大量のテーブルがあって絞り込みたい
A: MySQL は SHOW TABLES LIKE 'prefix_%'、PostgreSQL は \dt prefix_*、Oracle は WHERE table_name LIKE 'PREFIX\_%' ESCAPE '\'

Q: 行数が知りたい
A: MySQL information_schema.TABLES.TABLE_ROWS は概算。正確には SELECT COUNT(*) FROM tbl。InnoDB の概算は最大 50% ズレることもある。

Q: information_schema は全 RDBMS で使える?
A: MySQL / PostgreSQL / SQL Server / MariaDB は標準対応。Oracle のみ非対応で、代わりに USER_TABLES / ALL_TABLES を使う。