sql >> Database teknologi >  >> RDS >> SQLite

2 måder at liste tabellerne i en SQLite-database

Her er to måder at returnere en liste over tabeller i alle vedhæftede databaser i SQLite.

Den første metode returnerer alle tabeller og visninger for alle vedhæftede databaser.

Den anden metode giver dig mulighed for at returnere både tabeller og visninger, eller kun tabeller, men kun for den primære database.

Opdatering dec. 2021 :Siden jeg skrev denne artikel, har SQLite introduceret en anden mulighed, som jeg har angivet som en bonus tredje mulighed i slutningen af ​​denne artikel.

.tables-kommandoen

Den nemmeste måde at returnere en liste over tabeller på, når du bruger SQLite-kommandolinjeskallen, er at bruge .tables kommando.

Denne kommando kan bruges med eller uden et argument. Hvis du bruger det uden at angive et argument, returnerer det alle tabeller (og visninger) for alle vedhæftede databaser.

Eksempel:

.tables

Resultat:

Album          Employee       InvoiceLine    PlaylistTrack
Artist         Genre          MediaType      Track        
Customer       Invoice        Playlist     

I mit tilfælde er der kun én vedhæftet database (Chinook-eksempeldatabasen), og alle denne databases tabeller returneres.

Som nævnt kan du også give et argument til denne kommando. Et sådant argument kan bruges til at begrænse de tabeller, der returneres af kommandoen. For eksempel kan du navngive en specifik tabel, eller du kan bruge mønstermatchning til kun at returnere tabeller, der matcher et givet mønster.

Eksempel:

.tables a%

Resultat:

Album   Artist

I dette tilfælde returneres kun tabeller, der begynder med bogstavet "a".

En ting at være opmærksom på er, at .tables kommandoen returnerer både tabeller og visninger. Hvis du vil ekskludere visninger fra dine resultater, kan du bruge mønstermatchning til at ekskludere visninger. Dette vil kun fungere, hvis dine visninger bruger en navngivningskonvention, der adskiller dem fra tabeller og andre objekter.

En anden måde at ekskludere visninger fra dine resultater på er at forespørge på sqlite_schema bord direkte. Selvom denne tabel også indeholder visninger, kan du bruge SQL til at ekskludere dem fra dine resultater, hvis det er nødvendigt.

sqlite_schema-tabellen

Hver SQLite-database har et sqlite_schema tabel, der definerer skemaet for databasen. Du kan bruge denne tabel til at returnere en liste over tabeller i din database.

Når du bruger .tables kommando, det svarer til at gøre dette:

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

Der er dog en forskel.

Forskellen er, at denne metode kun returnerer resultater for den primære databasen (.tables kommandoen returnerer resultater for alle vedhæftede databaser).

Kørsel af ovenstående forespørgsel returnerer følgende resultat:

Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
Track

Den forespørgsel returnerer både tabeller og visninger (ligesom .tables kommando gør).

I mit tilfælde er der ingen visninger, men hvis du vil udelukke visninger i resultaterne, skal du bruge dette:

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

Resultat:

Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
Track

sqlite_schema tabellen kan også tilgås ved at bruge sqlite_master .

Ekskluder visninger

For fuldstændighedens skyld er her et hurtigt eksempel, der bruger en database med udsigt. Denne database indeholder én tabel (kaldet Produkter ) og én visning (kaldet vProducts ).

Opret forbindelse til SQLite/databasen:

sqlite3 Store.db

Kør .tables kommando:

.tables

Resultat:

Products   vProducts

Forespørg på sqlite_schema tabel for borde og visninger:

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

Resultat:

Products
vProducts

Forespørg nu sqlite_schema kun til tabeller :

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

Resultat:

Products

Midlertidige tabeller

.table kommando returnerer både permanente tabeller og midlertidige tabeller. sqlite_schema tabel indeholder kun permanente tabeller. Hvis du kun skal returnere de midlertidige tabeller, kan du forespørge sqlite_temp_schema eller dets synonym sqlite_temp_master .

For at returnere både permanente tabeller og midlertidige tabeller, kan du bruge en forespørgsel som denne:

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

Bonus 3. mulighed:table_list Pragma Statement

Siden jeg første gang skrev denne artikel, har SQLite introduceret table_list pragma-erklæring, som viser tabeller og visninger:

PRAGMA table_list;

Se PRAGMA table_list i SQLite for en oversigt og eksempler.


  1. Sådan ændres serverniveausortering af kørende SQL Server-instans

  2. Hvordan Oracle Index klyngefaktor beregnes

  3. Er ODP.NET påkrævet til Oracle 11g Client?

  4. Konverter Unix-tidsstempel til menneskelig læsbar dato ved hjælp af MySQL