如何编写SQL查询列出指定数据库所有表及其类型、属性数量
需求实现SQL方案
以下按常用数据库分类给出对应查询语句,使用时替换语句中指定数据库名为你实际要查询的数据库名称即可。
MySQL
直接查询系统元数据表information_schema获取结果:
SELECT t.TABLE_NAME AS 表名, t.TABLE_TYPE AS 表类型, COUNT(c.COLUMN_NAME) AS 字段总数量 FROM information_schema.TABLES t LEFT JOIN information_schema.COLUMNS c ON t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME WHERE t.TABLE_SCHEMA = '指定数据库名' GROUP BY t.TABLE_NAME, t.TABLE_TYPE ORDER BY t.TABLE_NAME;
返回的表类型字段值说明:BASE TABLE代表普通物理表,VIEW代表视图
PostgreSQL
可直接使用兼容SQL标准的information_schema查询:
SELECT t.TABLE_NAME AS 表名, t.TABLE_TYPE AS 表类型, COUNT(c.COLUMN_NAME) AS 字段总数量 FROM information_schema.TABLES t LEFT JOIN information_schema.COLUMNS c ON t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME WHERE t.TABLE_CATALOG = '指定数据库名' AND t.TABLE_SCHEMA = 'public' -- 可替换为实际要查询的schema名称 GROUP BY t.TABLE_NAME, t.TABLE_TYPE ORDER BY t.TABLE_NAME;
SQL Server
USE 指定数据库名 GO SELECT t.name AS 表名, CASE WHEN t.type = 'U' THEN 'BASE TABLE' WHEN t.type = 'V' THEN 'VIEW' ELSE t.type END AS 表类型, COUNT(c.name) AS 字段总数量 FROM sys.tables t LEFT JOIN sys.columns c ON t.object_id = c.object_id GROUP BY t.name, t.type ORDER BY t.name;
默认只返回用户自定义表,如果需要包含系统表,可在WHERE条件中添加对应type过滤规则
内容的提问来源于stack exchange,提问作者Sindhu
相关产品推荐
相关产品推荐

