SQLiteで接続されているすべてのデータベースのテーブルのリストを返す2つの方法があります。
最初のメソッドは、すべてのテーブルをおよび返します。 接続されているすべてのデータベースのビュー。
2番目の方法では、テーブルとビューの両方、またはテーブルのみを返すオプションが提供されますが、プライマリデータベースのみが返されます。
2021年12月の更新 :この記事を書いた後、SQLiteは別のオプションを導入しました。これは、この記事の最後にボーナスの3番目のオプションとしてリストされています。
.tablesコマンド
SQLiteコマンドラインシェルを使用するときにテーブルのリストを返す最も簡単な方法は、.tables
を使用することです。 指図。
このコマンドは、引数の有無にかかわらず使用できます。引数を指定せずに使用すると、接続されているすべてのデータベースのすべてのテーブル(およびビュー)が返されます。
例:
.tables
結果:
Album Employee InvoiceLine PlaylistTrack Artist Genre MediaType Track Customer Invoice Playlist
私の場合、接続されているデータベース(Chinookサンプルデータベース)は1つだけで、このデータベースのすべてのテーブルが返されます。
前述のように、このコマンドに引数を指定することもできます。このような引数を使用して、コマンドによって返されるテーブルを制限できます。たとえば、特定のテーブルに名前を付けることも、パターンマッチングを使用して、特定のパターンに一致するテーブルのみを返すこともできます。
例:
.tables a%
結果:
Album Artist
この場合、文字「a」で始まるテーブルのみが返されます。
注意すべき点の1つは、.tables
です。 コマンドはとの両方のテーブルを返します ビュー。結果からビューを除外する場合は、パターンマッチングを使用してビューを除外できます。これは、ビューがテーブルや他のオブジェクトと区別するための命名規則を使用している場合にのみ機能します。
結果からビューを除外する別の方法は、 sqlite_schemaにクエリを実行することです。 直接テーブル。このテーブルにはビューも含まれていますが、必要に応じてSQLを使用してビューを結果から除外できます。
sqlite_schemaテーブル
すべてのSQLiteデータベースにはsqlite_schemaがあります データベースのスキーマを定義するテーブル。このテーブルを使用して、データベース内のテーブルのリストを返すことができます。
.tables
を使用する場合 コマンド、これを行うのと似ています:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
ただし、違いがあります。
違いは、このメソッドは primaryの結果のみを返すことです。 データベース(.tables
コマンドはすべての結果を返します 添付データベース)。
上記のクエリを実行すると、次の結果が返されます。
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
そのクエリは、テーブルとテーブルの両方を返します ビュー(.tables
と同じように) コマンドは行います)。
私の場合、ビューはありませんが、結果からビューを除外する場合は、次を使用してください:
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
結果:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
sqlite_schema sqlite_masterを使用してテーブルにアクセスすることもできます 。
ビューを除外
完全を期すために、ビュー付きのデータベースを使用する簡単な例を次に示します。このデータベースには、1つのテーブル(製品と呼ばれる)が含まれています )と1つのビュー( vProducts と呼ばれます) 。
SQLite /データベースに接続します:
sqlite3 Store.db
.tables
を実行します コマンド:
.tables
結果:
Products vProducts
sqlite_schemaをクエリします テーブルのテーブルおよび ビュー:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
結果:
Products vProducts
次に、 sqlite_schemaをクエリします テーブルの場合のみ :
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
結果:
Products
一時テーブル
.table
コマンドは、永続テーブルと一時テーブルの両方を返します。 sqlite_schema テーブルには永続テーブルのみが含まれます。一時テーブルのみを返す必要がある場合は、 sqlite_temp_schemaにクエリを実行できます。 またはその同義語sqlite_temp_master 。
永続テーブルと一時テーブルの両方を返すには、次のようなクエリを使用できます。
SELECT name FROM
(SELECT * FROM sqlite_schema UNION ALL
SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;
ボーナス3番目のオプション:table_listプラグマステートメント
この記事を最初に書いたときから、SQLiteは table_listを導入しました テーブルとビューを一覧表示するプラグマステートメント:
PRAGMA table_list;
PRAGMA
を参照してください 概要と例については、SQLiteのtable_listを参照してください。