Există două moduri de a returna o listă de tabele din toate bazele de date atașate în SQLite.
Prima metodă returnează toate tabelele și vizualizările pentru toate bazele de date atașate.
A doua metodă vă oferă opțiunea de a returna atât tabelele, cât și vizualizările, sau doar tabelele, dar numai pentru baza de date principală.
Comanda .tables
Cel mai simplu mod de a returna o listă de tabele atunci când se utilizează shell-ul liniei de comandă SQLite este de a utiliza comanda .tables
.
Această comandă poate fi utilizată cu sau fără un argument. Dacă o utilizați fără a furniza un argument, aceasta returnează toate tabelele (și vizualizările) pentru toate bazele de date atașate.
Exemplu:
.tables
Rezultat:
Album Employee InvoiceLine PlaylistTrackArtist Genre MediaType Track Customer Invoice Playlist
În cazul meu, există o singură bază de date atașată (baza de date de probă Chinook), iar toate tabelele acestei baze de date sunt returnate.
După cum am menționat, puteți, de asemenea, să furnizați un argument la această comandă. Un astfel de argument poate fi utilizat pentru a limita tabelele returnate de comandă. De exemplu, puteți numi un tabel specific sau puteți utiliza potrivirea de tipare pentru a returna numai tabelele care se potrivesc cu un anumit tipar.
Exemplu:
.tables a%
Rezultat:
Album Artist
În acest caz sunt returnate numai tabelele care încep cu litera „a”.
Un lucru de care trebuie să țineți cont este faptul că comanda .tables
returnează atât tabele cât și vizualizări. Dacă doriți să excludeți vederile din rezultate, ați putea utiliza potrivirea de tipare pentru a exclude vederile. Acest lucru va funcționa numai dacă vederile dvs. folosesc o convenție de denumire care le distinge de tabele și alte obiecte.
O altă modalitate de a exclude vederile din rezultatele dvs. este să interogați direct tabelul sqlite_master. Deși acest tabel conține de asemenea vizualizări, puteți folosi SQL pentru a le exclude din rezultatele dumneavoastră, dacă este necesar.
Tabela sqlite_master
Care bază de date SQLite are o tabelă sqlite_master care definește schema pentru baza de date. Puteți utiliza acest tabel pentru a returna o listă de tabele din baza de date.
Când folosiți comanda .tables
, este similar cu a face acest lucru:
SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'ORDER BY 1;
Cu toate acestea, există o diferență.
Diferența constă în faptul că această metodă returnează rezultate numai pentru baza de date primară (comanda .tables
returnează rezultate pentru toate bazele de date atașate).
Executarea interogării de mai sus returnează următorul rezultat:
AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack
Această interogare returnează atât tabelele cât și vizualizările (la fel cum face comanda .tables
).
În cazul meu nu există vizualizări, dar dacă doriți să excludeți vizualizările din rezultate, utilizați acest lucru:
SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'ORDER BY 1;
Rezultat:
AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack
Excludeți vizualizările
De dragul completitudinii, iată un exemplu rapid care utilizează o bază de date cu o vizualizare. Această bază de date conține o tabelă (numită Products) și o vizualizare (numită vProducts).
Conectați-vă la SQLite/baza de date:
sqlite3 Store.db
Executați comanda .tables
:
.tables
Rezultat:
Products vProducts
Interoghează tabela sqlite_master pentru tabele și vizualizări:
SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'ORDER BY 1;
Rezultat:
ProductsvProducts
Acum interoghează sqlite_master doar pentru tabele:
SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'ORDER BY 1;
Rezultat:
Products
Temporary Tables
Tabelele .table returnează atât tabelele permanente, cât și tabelele temporare. Tabelul sqlite_master conține numai tabele permanente. Dacă aveți nevoie să returnați doar tabelele temporare, puteți interoga sqlite_temp_master.
Pentru a returna atât tabelele permanente, cât și tabelele temporare, puteți utiliza o interogare ca aceasta:
SELECT name FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE type='table'ORDER BY name;