Database.Guide

Hier zijn twee manieren om een lijst van tabellen in alle gekoppelde databases in SQLite terug te geven.

De eerste methode retourneert alle tabellen en views voor alle gekoppelde databases.

De tweede methode geeft u de mogelijkheid om zowel tabellen als aanzichten terug te geven, of alleen tabellen, maar alleen voor de primaire database.

Het .tables commando

De eenvoudigste manier om een lijst met tabellen op te vragen met behulp van de SQLite command line shell is het .tables commando te gebruiken.

Dit commando kan met of zonder argument worden gebruikt. Als u het gebruikt zonder een argument op te geven, geeft het alle tabellen (en views) voor alle gekoppelde databases.

Voorbeeld:

.tables

Resultaat:

Album Employee InvoiceLine PlaylistTrackArtist Genre MediaType Track Customer Invoice Playlist 

In mijn geval is er slechts één gekoppelde database (de Chinook voorbeelddatabase), en alle tabellen van deze database worden teruggegeven.

Zoals gezegd, kunt u ook een argument opgeven voor dit commando. Een dergelijk argument kan worden gebruikt om de door het commando teruggezonden tabellen te beperken. U kunt bijvoorbeeld een specifieke tabel noemen, of u kunt patroonvergelijking gebruiken om alleen tabellen terug te geven die met een bepaald patroon overeenkomen.

Voorbeeld:

.tables a%

Resultaat:

Album Artist

In dit geval worden alleen tabellen teruggegeven die met de letter “a” beginnen.

Een ding om op te letten is dat het .tables-commando zowel tabellen als overzichten teruggeeft. Als je views wilt uitsluiten van je resultaten, zou je pattern matching kunnen gebruiken om views uit te sluiten. Dit zal alleen werken als uw standpunten gebruik maken van een naamgeving conventie die hen onderscheidt van tabellen en andere objecten.

Een andere manier om standpunten uit te sluiten van uw resultaten is om query’s de sqlite_master tabel direct. Hoewel deze tabel ook views bevat, kunt u SQL gebruiken om ze van uw resultaten uit te sluiten als dat nodig is.

De sqlite_master tabel

Elke SQLite database heeft een sqlite_master tabel die het schema voor de database definieert. U kunt deze tabel gebruiken om een lijst van tabellen in uw database op te vragen.

Wanneer u het .tables commando gebruikt, is het vergelijkbaar met het volgende:

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

Echter, er is een verschil.

Het verschil is dat deze methode alleen resultaten voor de primaire database retourneert (de .tables-opdracht retourneert resultaten voor alle gekoppelde databases).

Het uitvoeren van de bovenstaande query retourneert het volgende resultaat:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

Deze query retourneert zowel tabellen als weergaven (net zoals de .tables-opdracht doet).

In mijn geval zijn er geen views, maar als u views in de resultaten wilt uitsluiten, gebruikt u dit:

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

Resultaat:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

Exclude Views

Voor de volledigheid volgt hier een snel voorbeeld dat gebruik maakt van een database met een view. Deze database bevat één tabel (genaamd Products) en één view (genaamd vProducts).

Maak verbinding met SQLite/de database:

sqlite3 Store.db

Run het .tables commando:

.tables

Resultaat:

Products vProducts

Vraag de sqlite_master tabel voor tabellen en views:

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

Resultaat:

ProductsvProducts

Vraag sqlite_master nu alleen voor tabellen:

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

Resultaat:

Products

Tijdelijke tabellen

Het .table commando geeft zowel permanente tabellen als tijdelijke tabellen. De sqlite_master tabel bevat alleen permanente tabellen. Als u alleen de tijdelijke tabellen wilt retourneren, kunt u een query uitvoeren in 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_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE type='table'ORDER BY name;

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.