您需要获取 SQL 数据库中所有表的列表吗?
在本指南中了解如何在几个不同的数据库供应商中执行此操作。
SQL 显示表
有时您需要从数据库中获取表列表。这可能是为了帮助测试,在创建表或删除表之前查看存在哪些表,或出于其他原因。
如果您忘记了特定表的名称,或者忘记了如何拼写一个表(它是复数还是单数?一个或两个带下划线的单词?),那么您可以使用这些查询来显示数据库中的所有表。
每个数据库供应商都有不同的表格显示方式。有时有一个命令,其他人有一个来自数据字典的SELECT 查询。
让我们来看看每个数据库中的几种方式。
在 Oracle SQL 中显示表
Oracle 有几个不同的内置视图,您可以查询这些视图来查找所需的数据。您可以查询这些视图中的任何一个以列出 Oracle 中的所有表。
您可能没有查看每个视图的权限,因此如果一个查询不起作用,请尝试另一个查询。
用户拥有的表
要查看当前登录用户拥有的表,可以查询 user_tables 视图。
SELECT table_name
FROM user_tables
ORDER BY table_name ASC;这仅显示当前用户拥有的表。它不包括当前用户可以看到的其他用户拥有的表。
用户可访问的表
要查看当前用户可以访问的所有表,可以查询 all_tables 视图。
SELECT table_name
FROM all_tables
ORDER BY table_name ASC;您可以将所有者列添加到视图中以查看谁拥有该表:
SELECT table_name, owner
FROM all_tables
ORDER BY table_name ASC;这可能会显示很多结果,包括很多系统表。您可以为所有者字段添加 WHERE 子句以过滤所有者。
所有数据库表
如果要列出 Oracle 数据库中的所有表,可以查询 dba_tables 视图。
SELECT table_name
FROM dba_tables
ORDER BY table_name ASC;此视图(以及所有其他以 dba_ 开头的视图)适用于数据库管理员。如果您没有管理员权限,您将收到此错误:
ORA-00942: table or view does not exist.
要查看此视图,您需要以下任一权限:
- dba_tables 视图
- SELECT ANY DICTIONARY 权限
- SELECT_CATALOG_ROLE 角色
如果您不确定要查询的对象是表还是视图,您还可以查询 dba_views、all_views 或 user_views 对象。
这些查询执行 UNION ALL 以显示 Oracle 数据库中所有表和视图的列表。
DBA_TABLES 和 DBA_VIEWS
SELECT 'Table' AS object_type, owner, table_name
FROM dba_tables
UNION ALL
SELECT 'View', owner, view_name
FROM dba_views;
ALL_TABLES 和 ALL_VIEWS
SELECT 'Table' AS object_type, owner, table_name
FROM all_tables
UNION ALL
SELECT 'View', owner, view_name
FROM all_views;
USER_TABLES 和 USER_VIEWS
SELECT 'Table' AS object_type, table_name
FROM user_tables
UNION ALL
SELECT 'View', view_name
FROM user_views;
在 SQL Server 中显示表
有几种方法可以在 SQL Server 中列出表。
所有表和视图
在 SQL 中查找所有表的最简单方法是查询 INFORMATION_SCHEMA 视图。
您可以通过指定信息模式,然后是“表”视图来做到这一点。
这是一个例子。
SELECT table_name, table_schema, table_type
FROM information_schema.tables
ORDER BY table_name ASC;这将显示表的名称、它属于哪个模式以及类型。
类型将是表的“BASE TABLE”或视图的“VIEW”。
仅限所有表格
要查看仅包含表而不包含视图的列表,您可以过滤 table_type 列。
SELECT table_name, table_schema
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
ORDER BY table_name ASC;
SQL Server 2000
如果您运行的是 SQL Server 2005,则可以使用上面的 information_schema 方法。如果您使用的是 2000 或更早版本,则需要使用不同的方法。
您可以查询 SYSOBJECTS 视图以查找数据库中的所有表。这显示了所有对象,因此要将其过滤到表中,我们可以过滤 xtype 列等于“U”的值,它代表一个用户表。
这是查询:
SELECT *
FROM sysobjects
WHERE xtype = 'U'
ORDER BY name ASC;
在 MySQL 中显示表
在 MySQL 中有几种列出表的方法。
显示表格命令
登录到数据库后,您可以运行命令 SHOW TABLES 以查看所有表。
SHOW TABLES;输出将显示一个表名列表,仅此而已。
显示表格类型
您可以使用可选的 FULL 修饰符,它也显示表类型。
SHOW FULL TABLES;这将显示表名和表类型,即 VIEW 或 BASE TABLE。
在另一个数据库中显示表
您也可以使用此命令查看另一个数据库中的表列表。
SHOW TABLES FROM database_name;
显示匹配模式的表格
从其他数据库的视图中选择时,可以使用 LIKE过滤匹配某个字符串的表。
您可以使用 SHOW TABLES 命令执行相同的操作:
SHOW TABLES LIKE string;要查看包含字母“user”的所有表,您可以运行此命令。
SHOW TABLES LIKE '%user%';
在 PostgreSQL 中显示表
有几种方法可以查看 PostgreSQL 中的表列表。
显示表格
如果您使用的是命令行,则可以使用 dt 命令显示所有表:
\dt这在 IDE 中不起作用,但还有另一种方法。
显示表格和说明
如果您使用的是命令行,则可以使用 dt 命令显示所有表以及表描述:
\dt+如上所述,如果您不使用命令行,还有另一种方法。
从目录中选择
如果您想要其他方法,或者如果您正在使用 IDE 并且无法使用 \dt,那么您可以从 pg_catalog 模式中进行选择。
这是一个例子:
SELECT tablename, schemaname, tableowner
FROM pg_catalog.pg_tables
WHERE schemaname != 'pg_catalog'
AND schemaname != 'information_schema'
ORDER BY tablename ASC;这将显示数据库中所有表的信息。WHERE 子句过滤掉系统表,但如果需要,您可以省略 WHERE 子句并查看这些表。
结论
每个供应商有几种方法可以查看数据库中的表列表。有些是内置命令,有些是从数据库视图中选择的。以类似的方式显示数据库列表。
原文标题:SQL Show Tables: List All Tables in a Database
原文作者:Ben Brumm
原文链接:https://www.databasestar.com/sql-list-tables/




