Hier zijn twee manieren om een lijst met tabellen in alle gekoppelde databases in SQLite te retourneren.
De eerste methode retourneert alle tabellen en weergaven voor alle bijgevoegde databases.
De tweede methode geeft u de mogelijkheid om zowel tabellen als views te retourneren, of alleen tabellen, maar alleen voor de primaire database.
Update december 2021 :Sinds het schrijven van dit artikel heeft SQLite een andere optie geïntroduceerd, die ik aan het einde van dit artikel heb vermeld als een derde bonusoptie.
Het .tables-commando
De eenvoudigste manier om een lijst met tabellen te retourneren wanneer u de SQLite-opdrachtregelshell gebruikt, is door de .tables
te gebruiken opdracht.
Deze opdracht kan met of zonder argument worden gebruikt. Als u het gebruikt zonder een argument op te geven, retourneert het alle tabellen (en weergaven) voor alle gekoppelde databases.
Voorbeeld:
.tables
Resultaat:
Album Employee InvoiceLine PlaylistTrack Artist Genre MediaType Track Customer Invoice Playlist
In mijn geval is er maar één bijgevoegde database (de Chinook-voorbeelddatabase) en worden alle tabellen van deze database geretourneerd.
Zoals vermeld, kunt u ook een argument aan dit commando geven. Een dergelijk argument kan worden gebruikt om de tabellen te beperken die door de opdracht worden geretourneerd. U kunt bijvoorbeeld een specifieke tabel een naam geven, of u kunt patroonovereenkomst gebruiken om alleen tabellen te retourneren die overeenkomen met een bepaald patroon.
Voorbeeld:
.tables a%
Resultaat:
Album Artist
In dit geval worden alleen tabellen geretourneerd die beginnen met de letter "a".
Een ding om op te letten is dat de .tables
commando retourneert beide tabellen en keer bekeken. Als u weergaven van uw resultaten wilt uitsluiten, kunt u patroonovereenkomst gebruiken om weergaven uit te sluiten. Dit werkt alleen als uw weergaven een naamgevingsconventie gebruiken die ze onderscheidt van tabellen en andere objecten.
Een andere manier om weergaven van uw resultaten uit te sluiten, is door een query uit te voeren op het sqlite_schema tafel direct. Hoewel deze tabel ook weergaven bevat, kunt u indien nodig SQL gebruiken om ze uit uw resultaten uit te sluiten.
De sqlite_schema-tabel
Elke SQLite-database heeft een sqlite_schema tabel die het schema voor de database definieert. U kunt deze tabel gebruiken om een lijst met tabellen in uw database te retourneren.
Wanneer u de .tables
. gebruikt commando, lijkt het op dit:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Er is echter een verschil.
Het verschil is dat deze methode alleen resultaten retourneert voor de primaire database (de .tables
commando retourneert resultaten voor allen bijgevoegde databases).
Het uitvoeren van de bovenstaande query geeft het volgende resultaat:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
Die zoekopdracht retourneert beide tabellen en weergaven (net als de .tables
commando doet).
In mijn geval zijn er geen weergaven, maar als je weergaven wilt uitsluiten in de resultaten, gebruik dan dit:
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Resultaat:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
Het sqlite_schema tabel kan ook worden geopend met behulp van sqlite_master .
Weergaven uitsluiten
Voor de volledigheid volgt hier een snel voorbeeld waarin een database met een view wordt gebruikt. Deze database bevat één tabel (genaamd Producten ) en één weergave (genaamd vProducts ).
Maak verbinding met SQLite/de database:
sqlite3 Store.db
Voer de .tables
uit commando:
.tables
Resultaat:
Products vProducts
Zoek in het sqlite_schema tafel voor tabellen en weergaven:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Resultaat:
Products vProducts
Zoek nu naar sqlite_schema voor tabellen alleen :
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Resultaat:
Products
Tijdelijke tabellen
De .table
commando retourneert zowel permanente tabellen als tijdelijke tabellen. Het sqlite_schema tabel bevat alleen permanente tabellen. Als u alleen de tijdelijke tabellen wilt retourneren, kunt u sqlite_temp_schema opvragen of zijn synoniem sqlite_temp_master .
Om zowel permanente tabellen als tijdelijke tabellen te retourneren, kunt u een query als deze gebruiken:
SELECT name FROM
(SELECT * FROM sqlite_schema UNION ALL
SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;
Bonus 3e optie:de table_list Pragma Statement
Sinds ik dit artikel voor het eerst schreef, heeft SQLite de table_list . geïntroduceerd pragma-statement, waarin tabellen en weergaven worden opgesomd:
PRAGMA table_list;
Zie PRAGMA
table_list in SQLite voor een overzicht en voorbeelden.