Database.Guide

Det finns två sätt att returnera en lista över tabeller i alla anslutna databaser i SQLite.

Den första metoden returnerar alla tabeller och vyer för alla bifogade databaser.

Den andra metoden ger dig möjlighet att returnera både tabeller och vyer, eller bara tabeller, men bara för den primära databasen.

Kommandot .tables

Det enklaste sättet att returnera en lista över tabeller när du använder kommandoradsskalet i SQLite är att använda kommandot .tables.

Detta kommando kan användas med eller utan argument. Om du använder det utan att ange ett argument returneras alla tabeller (och vyer) för alla bifogade databaser.

Exempel:

.tables

Resultat:

Album Employee InvoiceLine PlaylistTrackArtist Genre MediaType Track Customer Invoice Playlist 

I mitt fall finns det bara en bifogad databas (provdatabasen Chinook), och alla tabeller i denna databas returneras.

Som nämnts kan du också ange ett argument till detta kommando. Ett sådant argument kan användas för att begränsa de tabeller som returneras av kommandot. Du kan till exempel namnge en specifik tabell, eller så kan du använda mönstermatchning för att endast returnera tabeller som matchar ett visst mönster.

Exempel:

.tables a%

Resultat:

Album Artist

I det här fallet returneras endast tabeller som börjar med bokstaven ”a”.

En sak att tänka på är att kommandot .tables returnerar både tabeller och vyer. Om du vill utesluta vyer från dina resultat kan du använda mönstermatchning för att utesluta vyer. Detta fungerar endast om dina vyer använder en namnkonvention som skiljer dem från tabeller och andra objekt.

Ett annat sätt att utesluta vyer från dina resultat är att fråga direkt i tabellen sqlite_master. Även om den här tabellen också innehåller vyer kan du använda SQL för att utesluta dem från dina resultat om det behövs.

Tabellen sqlite_master

Alla SQLite-databaser har en sqlite_master-tabell som definierar schemat för databasen. Du kan använda den här tabellen för att returnera en lista över tabellerna i din databas.

När du använder kommandot .tables liknar det att göra så här:

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

Det finns dock en skillnad.

Skillnaden är att den här metoden endast returnerar resultat för den primära databasen (kommandot .tables returnerar resultat för alla bifogade databaser).

Att köra ovanstående fråga returnerar följande resultat:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

Denna fråga returnerar både tabeller och vyer (precis som kommandot .tables gör).

I mitt fall finns det inga vyer, men om du vill utesluta vyer i resultatet använder du detta:

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

Resultat:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

Exkludera vyer

För fullständighetens skull kommer här ett snabbt exempel som använder en databas med en vy. Databasen innehåller en tabell (kallad Products) och en vy (kallad vProducts).

Anslut till SQLite/databasen:

sqlite3 Store.db

Kör kommandot .tables:

.tables

Resultat:

Products vProducts

Förfråga tabellen sqlite_master efter tabeller och vyer:

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

Resultat:

ProductsvProducts

Förfråga nu sqlite_master endast efter tabeller:

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

Resultat:

Products

Temporära tabeller

Den .table-kommandot returnerar både permanenta tabeller och tillfälliga tabeller. Tabellen sqlite_master innehåller endast permanenta tabeller. Om du bara vill få tillbaka de tillfälliga tabellerna kan du fråga sqlite_temp_master.

För att få tillbaka både permanenta tabeller och tillfälliga tabeller kan du använda en sådan här fråga:

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

Lämna ett svar

Din e-postadress kommer inte publiceras.