Database.Guide

Hier sind zwei Wege, um eine Liste der Tabellen in allen angeschlossenen Datenbanken in SQLite zurückzugeben.

Die erste Methode gibt alle Tabellen und Ansichten für alle angehängten Datenbanken zurück.

Die zweite Methode gibt Ihnen die Möglichkeit, sowohl Tabellen als auch Views zurückzugeben, oder nur Tabellen, aber nur für die primäre Datenbank.

Der Befehl .tables

Der einfachste Weg, eine Liste von Tabellen zurückzugeben, wenn man die SQLite Kommandozeilen-Shell benutzt, ist der Befehl .tables.

Dieser Befehl kann mit oder ohne ein Argument verwendet werden. Wenn Sie ihn ohne ein Argument verwenden, werden alle Tabellen (und Ansichten) für alle angehängten Datenbanken zurückgegeben.

Beispiel:

.tables

Ergebnis:

Album Employee InvoiceLine PlaylistTrackArtist Genre MediaType Track Customer Invoice Playlist 

In meinem Fall gibt es nur eine angehängte Datenbank (die Beispieldatenbank Chinook), und alle Tabellen dieser Datenbank werden zurückgegeben.

Wie bereits erwähnt, können Sie diesem Befehl auch ein Argument hinzufügen. Ein solches Argument kann verwendet werden, um die vom Befehl zurückgegebenen Tabellen einzuschränken. Sie können z.B. eine bestimmte Tabelle benennen oder einen Mustervergleich verwenden, um nur Tabellen zurückzugeben, die einem bestimmten Muster entsprechen.

Beispiel:

.tables a%

Ergebnis:

Album Artist

In diesem Fall werden nur Tabellen zurückgegeben, die mit dem Buchstaben „a“ beginnen.

Eine Sache, die Sie beachten sollten, ist, dass der Befehl .tables sowohl Tabellen als auch Ansichten zurückgibt. Wenn Sie Ansichten aus Ihren Ergebnissen ausschließen möchten, können Sie den Mustervergleich verwenden, um Ansichten auszuschließen. Dies funktioniert nur, wenn Ihre Views eine Namenskonvention verwenden, die sie von Tabellen und anderen Objekten unterscheidet.

Eine andere Möglichkeit, Views aus Ihren Ergebnissen auszuschließen, ist die direkte Abfrage der Tabelle sqlite_master. Obwohl diese Tabelle auch Views enthält, können Sie diese bei Bedarf mit SQL aus den Ergebnissen ausschließen.

Die sqlite_master Tabelle

Jede SQLite Datenbank hat eine sqlite_master Tabelle, die das Schema für die Datenbank definiert. Sie können diese Tabelle verwenden, um eine Liste der Tabellen in Ihrer Datenbank zu erhalten.

Wenn Sie den .tablesBefehl verwenden, ist es ähnlich wie dies zu tun:

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

Es gibt jedoch einen Unterschied.

Der Unterschied besteht darin, dass diese Methode nur Ergebnisse für die primäre Datenbank zurückgibt (der Befehl .tables gibt Ergebnisse für alle angeschlossenen Datenbanken zurück).

Die Ausführung der obigen Abfrage gibt das folgende Ergebnis zurück:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

Diese Abfrage gibt sowohl Tabellen als auch Ansichten zurück (genau wie der Befehl .tables).

In meinem Fall gibt es keine Views, aber wenn Sie Views in den Ergebnissen ausschließen wollen, verwenden Sie dies:

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

Ergebnis:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

Exclude Views

Der Vollständigkeit halber hier ein kurzes Beispiel, das eine Datenbank mit einem View verwendet. Diese Datenbank enthält eine Tabelle (namens Products) und eine Ansicht (namens vProducts).

Verbinden Sie sich mit SQLite/der Datenbank:

sqlite3 Store.db

Ausführen des Befehls .tables:

.tables

Ergebnis:

Products vProducts

Abfrage der Tabelle sqlite_master nach Tabellen und Views:

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

Ergebnis:

ProductsvProducts

Nun Abfrage von sqlite_master nur nach Tabellen:

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

Ergebnis:

Products

Temporäre Tabellen

Der .table-Befehl gibt sowohl permanente Tabellen als auch temporäre Tabellen zurück. Die Tabelle sqlite_master enthält nur permanente Tabellen. Wenn Sie nur die temporären Tabellen zurückgeben möchten, können Sie sqlite_temp_master abfragen.

Um sowohl permanente als auch temporäre Tabellen zurückzugeben, können Sie eine Abfrage wie diese verwenden:

SELECT name FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE type='table'ORDER BY name;

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.