Oto dwa sposoby na zwrócenie listy tabel we wszystkich dołączonych bazach danych w SQLite.
Pierwsza metoda zwraca wszystkie tabele i widoki dla wszystkich dołączonych baz danych.
Druga metoda daje możliwość zwrócenia zarówno tabel, jak i widoków lub tylko tabel, ale tylko dla podstawowej bazy danych.
Aktualizacja grudnia 2021 :Od czasu napisania tego artykułu, SQLite wprowadził kolejną opcję, którą wymieniłem jako dodatkową trzecią opcję na końcu tego artykułu.
Polecenie .tables
Najłatwiejszym sposobem na zwrócenie listy tabel podczas korzystania z powłoki wiersza poleceń SQLite jest użycie .tables
Komenda.
To polecenie może być używane z argumentem lub bez. Jeśli użyjesz go bez podania argumentu, zwróci wszystkie tabele (i widoki) dla wszystkich dołączonych baz danych.
Przykład:
.tables
Wynik:
Album Employee InvoiceLine PlaylistTrack Artist Genre MediaType Track Customer Invoice Playlist
W moim przypadku jest tylko jedna dołączona baza danych (przykładowa baza danych Chinook) i wszystkie tabele tej bazy danych są zwracane.
Jak wspomniano, możesz również podać argument do tego polecenia. Taki argument może być użyty do ograniczenia tabel zwracanych przez polecenie. Na przykład możesz nazwać określoną tabelę lub użyć dopasowania do wzorca, aby zwrócić tylko tabele, które pasują do danego wzorca.
Przykład:
.tables a%
Wynik:
Album Artist
W tym przypadku zwracane są tylko tabele zaczynające się na literę „a”.
Należy pamiętać, że .tables
polecenie zwraca obie tabele i wyświetlenia. Jeśli chcesz wykluczyć widoki z wyników, możesz użyć dopasowania do wzorca, aby wykluczyć widoki. To zadziała tylko wtedy, gdy twoje widoki używają konwencji nazewnictwa, która odróżnia je od tabel i innych obiektów.
Innym sposobem wykluczenia wyświetleń z wyników jest zapytanie o sqlite_schema stół bezpośrednio. Chociaż ta tabela zawiera również widoki, możesz użyć SQL, aby w razie potrzeby wykluczyć je z wyników.
Tabela sqlite_schema
Każda baza danych SQLite ma sqlite_schema tabela definiująca schemat bazy danych. Możesz użyć tej tabeli do zwrócenia listy tabel w Twojej bazie danych.
Kiedy używasz .tables
polecenie, działa podobnie do tego:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Jest jednak różnica.
Różnica polega na tym, że ta metoda zwraca tylko wyniki dla podstawowego baza danych (.tables
polecenie zwraca wyniki dla wszystkich dołączone bazy danych).
Uruchomienie powyższego zapytania zwraca następujący wynik:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
To zapytanie zwraca obie tabele i widoki (tak jak .tables
polecenie robi).
W moim przypadku nie ma żadnych widoków, ale jeśli chcesz wykluczyć widoki w wynikach, użyj tego:
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Wynik:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
sqlite_schema dostęp do tabeli można również uzyskać za pomocą sqlite_master .
Wyklucz widoki
W trosce o kompletność, oto krótki przykład, który wykorzystuje bazę danych z widokiem. Ta baza danych zawiera jedną tabelę (o nazwie Produkty ) i jeden widok (nazywany vProducts ).
Połącz się z SQLite/bazą danych:
sqlite3 Store.db
Uruchom .tables
polecenie:
.tables
Wynik:
Products vProducts
Zapytanie o sqlite_schema tabela dla tabel i widoki:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Wynik:
Products vProducts
Teraz zapytanie sqlite_schema dla stołów tylko :
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Wynik:
Products
Tabele tymczasowe
.table
polecenie zwraca zarówno tabele stałe, jak i tabele tymczasowe. sqlite_schema tabela zawiera tylko stałe tabele. Jeśli chcesz zwrócić tylko tabele tymczasowe, możesz wykonać zapytanie sqlite_temp_schema lub jego synonim sqlite_temp_master .
Aby zwrócić zarówno tabele stałe, jak i tabele tymczasowe, możesz użyć zapytania w ten sposób:
SELECT name FROM
(SELECT * FROM sqlite_schema UNION ALL
SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;
Dodatkowa trzecia opcja:instrukcja Pragma table_list
Odkąd po raz pierwszy napisałem ten artykuł, SQLite wprowadził table_list oświadczenie pragma, które zawiera listę tabel i widoków:
PRAGMA table_list;
Zobacz PRAGMA
table_list w SQLite, aby uzyskać przegląd i przykłady.