SQLite
 sql >> Database >  >> RDS >> SQLite

2 modi per elencare le tabelle in un database SQLite

Ecco due modi per restituire un elenco di tabelle in tutti i database allegati in SQLite.

Il primo metodo restituisce tutte le tabelle e visualizzazioni per tutti i database allegati.

Il secondo metodo offre la possibilità di restituire sia tabelle che viste, o solo tabelle, ma solo per il database primario.

Aggiornamento dicembre 2021 :Da quando ho scritto questo articolo, SQLite ha introdotto un'altra opzione, che ho elencato come terza opzione bonus alla fine di questo articolo.

Il comando .tables

Il modo più semplice per restituire un elenco di tabelle quando si utilizza la shell della riga di comando di SQLite è utilizzare .tables comando.

Questo comando può essere utilizzato con o senza un argomento. Se lo usi senza fornire un argomento, restituisce tutte le tabelle (e le viste) per tutti i database allegati.

Esempio:

.tables

Risultato:

Album          Employee       InvoiceLine    PlaylistTrack
Artist         Genre          MediaType      Track        
Customer       Invoice        Playlist     

Nel mio caso, c'è un solo database allegato (il database di esempio Chinook) e tutte le tabelle di questo database vengono restituite.

Come accennato, puoi anche fornire un argomento a questo comando. Tale argomento può essere utilizzato per limitare le tabelle restituite dal comando. Ad esempio, puoi assegnare un nome a una tabella specifica oppure puoi utilizzare la corrispondenza del modello per restituire solo le tabelle che corrispondono a un determinato modello.

Esempio:

.tables a%

Risultato:

Album   Artist

In questo caso vengono restituite solo le tabelle che iniziano con la lettera “a”.

Una cosa da tenere a mente è che .tables comando restituisce entrambe le tabelle e visualizzazioni. Se desideri escludere le visualizzazioni dai risultati, puoi utilizzare la corrispondenza dei modelli per escludere le visualizzazioni. Funzionerà solo se le tue viste utilizzano una convenzione di denominazione che le distingue dalle tabelle e da altri oggetti.

Un altro modo per escludere le visualizzazioni dai risultati è eseguire una query su sqlite_schema tavolo direttamente. Sebbene questa tabella contenga anche viste, puoi utilizzare SQL per escluderle dai risultati, se necessario.

La tabella sqlite_schema

Ogni database SQLite ha uno schema_sqlite tabella che definisce lo schema per il database. È possibile utilizzare questa tabella per restituire un elenco di tabelle nel database.

Quando usi .tables comando, è simile a fare questo:

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

Tuttavia, c'è una differenza.

La differenza è che questo metodo restituisce solo risultati per il primario database (il .tables comando restituisce risultati per tutti database allegati).

L'esecuzione della query precedente restituisce il seguente risultato:

Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
Track

Quella query restituisce entrambe le tabelle e visualizzazioni (proprio come .tables comando fa).

Nel mio caso non ci sono visualizzazioni, ma se vuoi escludere visualizzazioni nei risultati, usa questo:

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

Risultato:

Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
Track

Il schema_sqlite è possibile accedere alla tabella anche utilizzando sqlite_master .

Escludi visualizzazioni

Per completezza, ecco un rapido esempio che utilizza un database con una vista. Questo database contiene una tabella (chiamata Prodotti ) e una vista (denominata vProducts ).

Connetti a SQLite/il database:

sqlite3 Store.db

Esegui .tables comando:

.tables

Risultato:

Products   vProducts

Interroga lo schema_sqlite tabella per le tabelle e visualizzazioni:

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

Risultato:

Products
vProducts

Ora interroga sqlite_schema per le tabelle solo :

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

Risultato:

Products

Tabelle temporanee

Il .table il comando restituisce sia tabelle permanenti che temporanee. Lo schema_sqlite table contiene solo tabelle permanenti. Se devi restituire solo le tabelle temporanee, puoi interrogare sqlite_temp_schema o il suo sinonimo sqlite_temp_master .

Per restituire sia tabelle permanenti che tabelle temporanee, puoi utilizzare una query come questa:

SELECT name FROM 
   (SELECT * FROM sqlite_schema UNION ALL
    SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;

3a opzione bonus:la dichiarazione pragma table_list

Da quando ho scritto questo articolo per la prima volta, SQLite ha introdotto la lista_tabella dichiarazione pragma, che elenca tabelle e viste:

PRAGMA table_list;

Vedi PRAGMA table_list in SQLite per una panoramica e degli esempi.