暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Show Tables:列出数据库中的所有表(涵盖Oracle、MySQL、SQL Server、PostgreSQL)

原创 小小亮 2022-10-13
10954

您需要获取 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/


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论