Hier sind zwei Möglichkeiten, um eine Liste von Tabellen in allen angehängten Datenbanken in SQLite zurückzugeben.
Die erste Methode gibt alle Tabellen und zurück Ansichten für alle angeschlossenen Datenbanken.
Die zweite Methode bietet Ihnen die Möglichkeit, sowohl Tabellen als auch Ansichten oder nur Tabellen zurückzugeben, jedoch nur für die Primärdatenbank.
Aktualisierung Dezember 2021 :Seit dem Schreiben dieses Artikels hat SQLite eine weitere Option eingeführt, die ich als dritte Bonusoption am Ende dieses Artikels aufgeführt habe.
Der .tables-Befehl
Der einfachste Weg, eine Liste von Tabellen zurückzugeben, wenn Sie die SQLite-Befehlszeilen-Shell verwenden, ist die Verwendung von .tables
Befehl.
Dieser Befehl kann mit oder ohne Argument verwendet werden. Wenn Sie es verwenden, ohne ein Argument anzugeben, gibt es alle Tabellen (und Ansichten) für alle angehängten Datenbanken zurück.
Beispiel:
.tables
Ergebnis:
Album Employee InvoiceLine PlaylistTrack Artist Genre MediaType Track Customer Invoice Playlist
In meinem Fall gibt es nur eine angeschlossene Datenbank (die Chinook-Beispieldatenbank), und alle Tabellen dieser Datenbank werden zurückgegeben.
Wie bereits erwähnt, können Sie diesem Befehl auch ein Argument zuweisen. Ein solches Argument kann verwendet werden, um die vom Befehl zurückgegebenen Tabellen einzuschränken. Sie können beispielsweise eine bestimmte Tabelle benennen oder den Musterabgleich 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.
Beachten Sie, dass die Datei .tables
Befehl gibt beide Tabellen und zurück Ansichten. Wenn Sie Aufrufe aus Ihren Ergebnissen ausschließen möchten, können Sie Aufrufe mithilfe des Musterabgleichs ausschließen. Dies funktioniert nur, wenn Ihre Ansichten eine Namenskonvention verwenden, die sie von Tabellen und anderen Objekten unterscheidet.
Eine andere Möglichkeit, Aufrufe aus Ihren Ergebnissen auszuschließen, besteht darin, das sqlite_schema abzufragen Tabelle direkt. Obwohl diese Tabelle auch Ansichten enthält, können Sie sie bei Bedarf mit SQL aus Ihren Ergebnissen ausschließen.
Die sqlite_schema-Tabelle
Jede SQLite-Datenbank hat ein sqlite_schema Tabelle, die das Schema für die Datenbank definiert. Sie können diese Tabelle verwenden, um eine Liste von Tabellen in Ihrer Datenbank zurückzugeben.
Wenn Sie die .tables
verwenden Befehl, ist es ähnlich wie hier:
SELECT name FROM sqlite_schema
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 zurückgibt Datenbank (die .tables
Befehl gibt Ergebnisse für alle zurück angehängte Datenbanken).
Das Ausführen der obigen Abfrage gibt das folgende Ergebnis zurück:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
Diese Abfrage gibt beide Tabellen und zurück Ansichten (genau wie die .tables
Befehl tut).
In meinem Fall gibt es keine Aufrufe, aber wenn Sie Aufrufe in den Ergebnissen ausschließen möchten, verwenden Sie Folgendes:
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Ergebnis:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
Das sqlite_schema Auf die Tabelle kann auch mit sqlite_master zugegriffen werden .
Aufrufe ausschließen
Der Vollständigkeit halber hier ein kurzes Beispiel, das eine Datenbank mit einer Ansicht verwendet. Diese Datenbank enthält eine Tabelle (genannt Produkte ) und eine Ansicht (genannt vProducts ).
Verbinden Sie sich mit SQLite/der Datenbank:
sqlite3 Store.db
Führen Sie die .tables
aus Befehl:
.tables
Ergebnis:
Products vProducts
Fragen Sie das sqlite_schema ab Tabelle für Tabellen und Ansichten:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Ergebnis:
Products vProducts
Fragen Sie nun sqlite_schema ab für Tabellen nur :
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Ergebnis:
Products
Temporäre Tabellen
Die .table
Der Befehl gibt sowohl permanente Tabellen als auch temporäre Tabellen zurück. Das sqlite_schema table enthält nur permanente Tabellen. Wenn Sie nur die temporären Tabellen zurückgeben müssen, können Sie sqlite_temp_schema abfragen oder sein Synonym sqlite_temp_master .
Um sowohl permanente Tabellen als auch temporäre Tabellen zurückzugeben, können Sie eine Abfrage wie diese verwenden:
SELECT name FROM
(SELECT * FROM sqlite_schema UNION ALL
SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;
Bonus 3. Option:Die table_list Pragma-Anweisung
Seit ich diesen Artikel zum ersten Mal geschrieben habe, hat SQLite die table_list eingeführt Pragma-Anweisung, die Tabellen und Ansichten auflistet:
PRAGMA table_list;
Siehe PRAGMA
table_list in SQLite für einen Überblick und Beispiele.