繁体   English   中英

"通过 SQL 查询获取特定数据库的所有表名?"

[英]Get all table names of a particular database by SQL query?

我正在开发可以处理多个数据库服务器的应用程序,例如“MySQL”和“MS SQL Server”。

我想使用适用于所有数据库类型的通用查询来获取特定数据库的表名。 我试过以下:

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'

可能是由于不同的 sql dbms 处理模式的方式。

尝试以下

对于 SQL Server:

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='dbName'

对于 MySQL:

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName' 

对于 Oracle,我认为等效的方法是使用DBA_TABLES

这里被盗:

USE YOURDBNAME
GO 
SELECT *
FROM sys.Tables
GO

以下查询将选择名为DBName的数据库中的所有Tables

USE DBName
GO 
SELECT *
FROM sys.Tables
GO
USE DBName;
SELECT * FROM sys.Tables;

我们可以在没有GO情况下进行处理,而您可以使用分号; .

只需将DATABASE NAME放在INFORMATION_SCHEMA.TABLES前面:

select table_name from YOUR_DATABASE.INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'

在 mysql 中,使用:

SHOW TABLES;

选择数据库后:

USE db_name

我没有看到这个答案,但嘿,这就是我所做的:

SELECT name FROM databaseName.sys.Tables;

如果有人想在不使用“use”关键字的情况下列出特定数据库中的所有表:

SELECT TABLE_NAME FROM databasename.INFORMATION_SCHEMA.TABLES

这很好用

SELECT * FROM information_schema.tables;

对于Mysql,你可以做的很简单。 显示表;

要选择下面的数据库查询:

use DatabaseName

现在

SELECT * FROM INFORMATION_SCHEMA.TABLES

现在您可以在控制台中看到下面创建的表。

煤灰。

查询

select * from sys.tables
order by schema_id      --comments: order by 'schema_id' to get the 'tables' in 'object explorer order'
go
Exec sp_MSforeachtable 'Select ''?'''
USE dbName;

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_SCHEMA = 'dbName' OR TABLE_SCHEMA = 'schemaName')
ORDER BY TABLE_NAME

如果您在 MS SQL 服务器上使用多个模式,那么在不同时选择 TABLE_SCHEMA 的情况下选择 TABLE_NAME 的好处可能有限,因此我假设我们在使用 MS SQL Server 时对属于已知模式的表感兴趣。

我已经使用 SQL Server Management Studio 使用我的 SQL Server 数据库和使用 MySQL 数据库的 MySQL Workbench 测试了上面的查询,在这两种情况下,它都给出了表名。

该查询将 Michael Baylon 的两个不同查询合并为一个,然后可以在任一数据库类型上运行。 WHERE 子句的第一部分适用于 MySQL 数据库,第二部分(在 OR 之后)适用于 MS SQL Server 数据库。 它是丑陋的并且在逻辑上有点不正确,因为它假设没有与数据库同名的不需要的模式。 这可能对正在寻找可以在任一数据库服务器上运行的单个查询的人有所帮助。

更新最新版本的 MSSQL SERVER (17.7)

SELECT name FROM sys.Tables WHERE type_desc = 'USER_TABLE'

SELECT *获取所有列。

在我们的 Oracle DB (PL/SQL) 中,下面的代码用于获取我们数据库中所有现有表的列表。

select * from tab;

select table_name from tabs;

两者都在工作。 让我们试着找到你的。

是的 oracle 是:

select * from user_tables

也就是说,如果您只想要登录user/schema拥有的对象,否则您可以使用包含系统表的all_tablesdba_tables

根据 Michael Baylon 的回答,我需要一个包含架构信息的列表,这就是我修改他的查询的方式。

SELECT TABLE_SCHEMA + '.' + TABLE_NAME as 'Schema.Table'
  FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = 'dbName'
  ORDER BY TABLE_SCHEMA, TABLE_NAME

只需在 Mysql 中使用以下 SQL 获取所有 improtanat 信息

    SELECT t.TABLE_NAME , t.ENGINE , t.TABLE_ROWS ,t.AVG_ROW_LENGTH, 
t.INDEX_LENGTH FROM 
INFORMATION_SCHEMA.TABLES as t where t.TABLE_SCHEMA = 'YOURTABLENAMEHERE' 
order by t.TABLE_NAME ASC limit 10000;

对于 postgres,它将是:

SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema  = 'your_schema' -- probably public 

显示表格列表

   SHOW TABLES FROM DBNAME        

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM