Database.Guide

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 głównej bazy danych.

Komenda .tables

Najprostszym sposobem zwrócenia listy tabel przy użyciu powłoki wiersza poleceń SQLite jest użycie komendy .tables.

To polecenie może być użyte z argumentem lub bez niego. Jeśli użyjesz go bez podania argumentu, zwraca ono wszystkie tabele (i widoki) dla wszystkich dołączonych baz danych.

Przykład:

.tables

Wynik:

Album Employee InvoiceLine PlaylistTrackArtist Genre MediaType Track Customer Invoice Playlist 

W moim przypadku jest tylko jedna dołączona baza danych (przykładowa baza danych Chinook), a wszystkie tabele tej bazy 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 podać nazwę konkretnej tabeli lub użyć dopasowywania wzorca, aby zwrócić tylko tabele pasujące do podanego wzorca.

Przykład:

.tables a%

Wynik:

Album Artist

W tym przypadku zwracane są tylko tabele zaczynające się na literę „a”.

Jedną z rzeczy, o których należy pamiętać, jest to, że polecenie .tables zwraca zarówno tabele, jak i widoki. Jeśli chcesz wykluczyć widoki ze swoich wyników, możesz użyć dopasowania wzorca, aby wykluczyć widoki. Będzie to działać tylko wtedy, gdy widoki używają konwencji nazewnictwa, która odróżnia je od tabel i innych obiektów.

Innym sposobem na wykluczenie widoków z wyników jest zapytanie bezpośrednio do tabeli sqlite_master. Chociaż ta tabela również zawiera widoki, możesz użyć SQL, aby wykluczyć je z wyników, jeśli zajdzie taka potrzeba.

Tabela sqlite_master

Każda baza danych SQLite posiada tabelę sqlite_master, która definiuje schemat bazy danych. Możesz użyć tej tabeli, aby zwrócić listę tabel w twojej bazie danych.

Kiedy używasz polecenia .tables, jest to podobne do robienia tego:

SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'ORDER BY 1;

Jest jednak pewna różnica.

Różnica polega na tym, że ta metoda zwraca wyniki tylko dla głównej bazy danych (polecenie .tables zwraca wyniki dla wszystkich dołączonych baz danych).

Wykonanie powyższego zapytania zwraca następujący wynik:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

To zapytanie zwraca zarówno tabele, jak i widoki (podobnie jak robi to polecenie .tables).

W moim przypadku nie ma żadnych widoków, ale jeśli chcesz wykluczyć widoki w wynikach, użyj tego:

SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'ORDER BY 1;

Result:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

Exclude Views

Dla kompletności, oto szybki przykład, który używa bazy danych z widokiem. Ta baza danych zawiera jedną tabelę (o nazwie Products) i jeden widok (o nazwie vProducts).

Połącz się z SQLite/bazą danych:

sqlite3 Store.db

Wykonaj polecenie .tables:

.tables

Wynik:

Products vProducts

Zapytaj tabelę sqlite_master o tabele i widoki:

SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'ORDER BY 1;

Wynik:

ProductsvProducts

Teraz zapytaj sqlite_master tylko o tabele:

SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'ORDER BY 1;

Wynik:

Products

Tabele tymczasowe

Komenda .table zwraca zarówno tabele stałe jak i tymczasowe. Tabela sqlite_master zawiera tylko tabele stałe. Jeśli chcesz zwrócić tylko tabele tymczasowe, możesz wykonać zapytanie sqlite_temp_master.

Aby zwrócić zarówno tabele stałe, jak i tymczasowe, możesz użyć zapytania takiego jak to:

SELECT name FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE type='table'ORDER BY name;

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.