如何在 SQL 中獲取表名
在 SQL 資料庫中,通常需要檢索資料庫中的表名列表以瞭解其結構或執行某些操作。每個基於 SQL 的資料庫系統都提供特定方法來查詢其元資料以提取表名。
在本文中,我們將探討如何在流行的關係資料庫系統(包括 MySQL、SQL Server、PostgreSQL 和 Oracle)中獲取表名。我們將介紹通常用於此任務的內建 SQL 查詢和函式。
需要檢索表名?
- 資料庫探索: 使用新的或不熟悉的資料庫時,我們可能希望探索所有表以瞭解其結構。
- 自動化: 在自動化指令碼中,動態檢索表名可以幫助執行備份、遷移或報告等任務。
- 元資料資訊: 在生成文件、執行模式比較或審查資料庫設計時非常有用。
在不同的資料庫中檢索表名
以下是從各種關係資料庫檢索表名的 SQL 查詢。
MySQL
在 MySQL 中,有關表的資訊儲存在一個名為 information_schema 的特殊模式中。我們可以查詢此模式以獲取表名列表。以下是檢索 MySQL 中表名的查詢語法:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'database_name';
其中:
- information_schema.tables:包含有關表的元資料。
- table_schema:指的是資料庫名稱。
- table_name:儲存表名的列。
示例
以下查詢將返回 employees 資料庫中的表列表:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'employees';
SQL Server
在 SQL Server 中,我們可以使用 INFORMATION_SCHEMA.TABLES 檢視檢索表名,類似於 MySQL。
SELECT table_name FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_catalog = 'database_name';
其中:
- table_type = 'BASE TABLE':確保只檢索實際表(而不是檢視)。
- table_catalog:指的是資料庫名稱。
示例
以下是檢索 SQL Server 中表名的查詢:
SELECT table_name FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_catalog = 'SalesDB';
使用系統表的替代查詢
我們還可以使用 SQL Server 中的系統檢視,例如 sys.tables。此查詢將檢索當前資料庫中所有表的名。
SELECT name FROM sys.tables;
PostgreSQL
在 PostgreSQL 中,我們可以使用 pg_tables 系統目錄來獲取表名。
SELECT tablename FROM pg_tables WHERE schemaname = 'public';
其中:
- pg_tables:儲存有關表的元資料的系統目錄。
- schemaname = 'public':篩選屬於預設模式 public 的表。如果我們使用的是不同的模式,可以更改此設定。
示例
以下查詢將返回 public 模式中的表名。
SELECT tablename FROM pg_tables WHERE schemaname = 'public';
使用 information_schema 的另一種方法
此查詢實現了相同的結果,但使用了 information_schema 檢視。
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE';
Oracle
在 Oracle 中,表元資料儲存在 ALL_TABLES、USER_TABLES 和 DBA_TABLES 檢視中。我們查詢的檢視取決於所需資料的範圍。以下是檢索 Oracle 中表名的查詢。這將檢索當前使用者擁有的表。
SELECT table_name FROM user_tables;
要檢索當前使用者可見的表,包括來自其他模式的表,請使用以下查詢:
SELECT table_name FROM all_tables;
此查詢將返回 Oracle 中當前使用者擁有的表名。
SELECT table_name FROM user_tables;
SQLite
在 SQLite 中,我們可以使用以下 SQL 命令列出當前資料庫中的表名。
SELECT name FROM sqlite_master WHERE type = 'table';
其中:
- sqlite_master:儲存資料庫的模式。
- type = 'table':過濾掉非表物件,如索引和檢視。
以下查詢將列出當前 SQLite 資料庫中的所有表。
SELECT name FROM sqlite_master WHERE type = 'table';
結論
在 SQL 中檢索表名是一個簡單而強大的操作,可以幫助探索資料庫結構並執行各種自動化或手動任務。不同的資料庫系統提供了類似的方法,通常利用 INFORMATION_SCHEMA 或系統目錄,如 pg_tables、user_tables 和 sqlite_master。