Příručka k databázi

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;

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.