Zde jsou dva způsoby, jak vrátit seznam tabulek ve všech připojených databázích v SQLite.
První metoda vrátí všechny tabulky a pohledy pro všechny připojené databáze.
Druhá metoda vám dává možnost vrátit jak tabulky, tak pohledy, nebo jen tabulky, ale pouze pro primární databázi.
Aktualizace z prosince 2021 :Od napsání tohoto článku představil SQLite další možnost, kterou jsem uvedl jako bonusovou třetí možnost na konci tohoto článku.
Příkaz .tables
Nejjednodušší způsob, jak vrátit seznam tabulek při použití příkazového řádku SQLite, je použít .tables
příkaz.
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 PlaylistTrack Artist Genre MediaType Track Customer Invoice Playlist
V mém případě je připojena pouze jedna databáze (vzorová databáze Chinook) a všechny tabulky této databáze jsou vráceny.
Jak již bylo zmíněno, k tomuto příkazu můžete také zadat 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í danému vzoru.
Příklad:
.tables a%
Výsledek:
Album Artist
V tomto případě jsou vráceny pouze tabulky, které začínají písmenem „a“.
Jedna věc, kterou je třeba mít na paměti, je, že .tables
příkaz vrátí obě tabulky a pohledy. Pokud chcete z výsledků vyloučit zobrazení, můžete k vyloučení zobrazení 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 z výsledků vyloučit zobrazení, je dotaz na sqlite_schema stůl přímo. Přestože tato tabulka obsahuje také pohledy, můžete je v případě potřeby z výsledků vyloučit pomocí SQL.
Tabulka sqlite_schema
Každá databáze SQLite má sqlite_schema tabulka, která definuje schéma databáze. Tuto tabulku můžete použít k vrácení seznamu tabulek ve vaší databázi.
Když použijete .tables
příkaz, je to podobné jako u tohoto:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Je tu však rozdíl.
Rozdíl je v tom, že tato metoda vrací výsledky pouze pro primární databáze (.tables
příkaz vrátí výsledky pro vše připojené databáze).
Spuštění výše uvedeného dotazu vrátí následující výsledek:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
Tento dotaz vrátí obě tabulky a zobrazení (stejně jako .tables
příkaz ano).
V mém případě neexistují žádná zobrazení, ale pokud chcete z výsledků vyloučit zobrazení, použijte toto:
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Výsledek:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
sqlite_schema k tabulce lze také přistupovat pomocí sqlite_master .
Vyloučit zhlédnutí
Pro úplnost uvádíme rychlý příklad, který používá databázi s pohledem. Tato databáze obsahuje jednu tabulku (nazvanou Produkty ) a jeden pohled (nazývaný vProdukty). ).
Připojte se k SQLite/databázi:
sqlite3 Store.db
Spusťte .tables
příkaz:
.tables
Výsledek:
Products vProducts
Dotaz na sqlite_schema tabulka pro tabulky a zobrazení:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Výsledek:
Products vProducts
Nyní zadejte dotaz sqlite_schema pouze pro tabulky :
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Výsledek:
Products
Dočasné tabulky
.table
příkaz vrátí jak trvalé tabulky, tak dočasné tabulky. sqlite_schema tabulka obsahuje pouze trvalé tabulky. Pokud potřebujete vrátit pouze dočasné tabulky, můžete dotaz na sqlite_temp_schema nebo jeho synonymum sqlite_temp_master .
Chcete-li vrátit trvalé i dočasné tabulky, můžete použít dotaz jako tento:
SELECT name FROM
(SELECT * FROM sqlite_schema UNION ALL
SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;
Bonus 3. možnost:Table_list Pragma Statement
Od doby, kdy jsem poprvé napsal tento článek, SQLite zavedl table_list prohlášení pragma, které uvádí tabulky a pohledy:
PRAGMA table_list;
Viz PRAGMA
table_list v SQLite pro přehled a příklady.