sql >> Database >  >> RDS >> SQLite

2 manieren om de tabellen in een SQLite-database weer te geven

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.


  1. Tijdsverschil krijgen tussen twee tijden in PHP

  2. Verbind uw OEM met Grafana met behulp van de Enterprise Manager-app voor Grafana

  3. Wat is sneller COALESCE OF ISNULL?

  4. Hoofdconcept van SQL Server-vergrendeling