Database.Guide

ここでは、SQLiteのすべての添付データベースのテーブルの一覧を返す方法を2つ紹介します。

最初の方法は、すべての接続されたデータベースのすべてのテーブルとビューを返します。

2番目のメソッドでは、テーブルとビューの両方を返すか、テーブルだけを返すかのオプションがありますが、プライマリデータベースのものだけです。

The .tables Command

SQLite コマンド ライン シェルを使用しているときにテーブルのリストを返す最も簡単な方法は、.tablesコマンドを使用することです。

このコマンドは、引数付きでも引数なしでも使用できます。

例:

.tables

結果:

Album Employee InvoiceLine PlaylistTrackArtist Genre MediaType Track Customer Invoice Playlist 

私の場合、1 つのデータベース (Chinook サンプル データベース) のみが接続されていて、このデータベースのすべてのテーブルが返されました。 このような引数は、コマンドによって返されるテーブルを制限するために使用することができます。 たとえば、特定のテーブルを指定したり、パターン・マッチングを使用して指定されたパターンに一致するテーブルのみを返したりすることができます。

例:

.tables a%

結果:

Album Artist

この場合、文字 “a” で始まるテーブルだけが返されます。

注意すべき点は、.tables コマンドはテーブルとビューの両方を返すことです。 結果からビューを除外したい場合は、パターン マッチングを使用してビューを除外することができます。

結果からビューを除外するもう一つの方法は、sqlite_masterテーブルを直接問い合わせることです。 このテーブルはビューも含みますが、必要であれば、SQLを使用して結果からビューを除外することができます。

The sqlite_master Table

すべてのSQLiteデータベースは、データベースのスキーマを定義するsqlite_masterテーブルを持ちます。 このテーブルを使用して、データベース内のテーブルのリストを返すことができます。

.tablesコマンドを使うときは、次のようにするのと似ています:

SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'ORDER BY 1;

ただし、違いがあります。

その違いは、この方法はプライマリ データベースに対してのみ結果を返すことです (.tables コマンドは、接続されているすべてのデータベースに対して結果を返します)。

上記のクエリを実行すると、次の結果が返ります。

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

そのクエリは、テーブルとビューを返します (.tables コマンドがするのと同じです)。

私の場合、ビューはありませんが、結果にビューを除外したい場合は、次のように使用します。

SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'ORDER BY 1;

Result:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

Exclude Views

念のため、ビュー付きのデータベースを使用した例を簡単に説明します。 このデータベースには、1 つのテーブル (Products と呼ばれる) と 1 つのビュー (vProducts と呼ばれる) が含まれます。

SQLite/ja データベースに接続します。

sqlite3 Store.db

.tables コマンドを実行します。

.tables

Result:

Products vProducts

テーブルとビューについてsqlite_masterテーブルに問い合わせます:

SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'ORDER BY 1;

Result:

ProductsvProducts

ここでテーブルのみについてsqlite_masterに問い合わせます:

SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'ORDER BY 1;

Result:

Products

Temporary Tables

The .Tables for the sqlite_master tableはテーブルを問い合わせますが、テーブルの問い合わせは行いません。tableコマンドは、パーマネントテーブルとテンポラリーテーブルの両方を返します。 sqlite_masterテーブルには永続テーブルのみが含まれます。 一時テーブルのみを返す必要がある場合、sqlite_temp_masterに問い合わせることができます。

永久テーブルと一時テーブルの両方を返すには、以下のような問い合わせを行うことができます。

コメントを残す

メールアドレスが公開されることはありません。