SQLite
 sql >> Datenbank >  >> RDS >> SQLite

2 Möglichkeiten zum Auflisten der Tabellen in einer SQLite-Datenbank

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.