Zde jsou uvedeny dva způsoby, jak vrátit seznam tabulek ve všech připojených databázích v SQLite.
První způsob vrátí všechny tabulky a pohledy pro všechny připojené databáze.
Druhá metoda vám dává možnost vrátit tabulky i pohledy, nebo jen tabulky, ale pouze pro primární databázi.
Příkaz .tables
Nejjednodušší způsob, jak vrátit seznam tabulek při použití příkazového řádku SQLite, je použít příkaz .tables
.
Tento příkaz lze použít s argumentem nebo bez něj. Pokud jej použijete bez zadání argumentu, vrátí všechny tabulky (a pohledy) pro všechny připojené databáze.
Příklad:
.tables
Výsledek:
Album Employee InvoiceLine PlaylistTrackArtist Genre MediaType Track Customer Invoice Playlist
V mém případě je připojena pouze jedna databáze (ukázková databáze Chinook) a jsou vráceny všechny tabulky této databáze.
Jak již bylo zmíněno, můžete tomuto příkazu zadat také argument. Takový argument lze použít k omezení tabulek vrácených příkazem. Můžete například pojmenovat konkrétní tabulku nebo můžete použít porovnávání vzorů a vrátit pouze tabulky, které odpovídají zadanému vzoru.
Příklad:
.tables a%
Výsledek:
Album Artist
V tomto případě jsou vráceny pouze tabulky začínající písmenem „a“.
Jednu věc je třeba mít na paměti: příkaz .tables
vrací jak tabulky, tak pohledy. Pokud chcete pohledy z výsledků vyloučit, můžete k vyloučení pohledů použít porovnávání vzorů. To bude fungovat pouze v případě, že vaše pohledy používají konvenci pojmenování, která je odlišuje od tabulek a jiných objektů.
Dalším způsobem, jak vyloučit pohledy z výsledků, je dotazovat se přímo na tabulku sqlite_master. Přestože tato tabulka také obsahuje pohledy, můžete je v případě potřeby pomocí SQL z výsledků vyloučit.
Tabulka sqlite_master
Každá databáze SQLite má tabulku sqlite_master, která definuje schéma databáze. Pomocí této tabulky můžete vrátit seznam tabulek v databázi.
Při použití příkazu .tables
se postupuje podobně jako při tomto:
SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'ORDER BY 1;
Je tu však jeden rozdíl.
Rozdíl spočívá v tom, že tato metoda vrací výsledky pouze pro primární databázi (příkaz .tables
vrací výsledky pro všechny připojené databáze).
Provedení výše uvedeného dotazu vrátí následující výsledek:
AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack
Tento dotaz vrací tabulky i pohledy (stejně jako příkaz .tables
).
V mém případě nejsou žádné pohledy, ale pokud chcete pohledy ve výsledku vyloučit, použijte tento příkaz:
SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'ORDER BY 1;
Výsledek:
AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack
Vyloučit pohledy
Pro úplnost uvádím rychlý příklad, který používá databázi s pohledy. Tato databáze obsahuje jednu tabulku (nazvanou Products) a jeden pohled (nazvaný vProducts).
Připojte se k SQLite/databázi:
sqlite3 Store.db
Spusťte příkaz .tables
:
.tables
Výsledek:
Products vProducts
Dotaz na tabulku sqlite_master pro tabulky a pohledy:
SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'ORDER BY 1;
Výsledek:
ProductsvProducts
Nyní dotaz na tabulku sqlite_master pouze pro tabulky:
SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'ORDER BY 1;
Výsledek:
Products
Dočasné tabulky
Příkaz .table vrátí jak trvalé tabulky, tak dočasné tabulky. Tabulka sqlite_master obsahuje pouze trvalé tabulky. Pokud potřebujete vrátit pouze dočasné tabulky, můžete použít dotaz sqlite_temp_master.
Chcete-li vrátit jak trvalé, tak dočasné tabulky, můžete použít tento dotaz:
SELECT name FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE type='table'ORDER BY name;
.