Voici deux façons de renvoyer une liste de tables dans toutes les bases de données attachées dans SQLite.
La première méthode renvoie toutes les tables et vues pour toutes les bases de données attachées.
La deuxième méthode vous donne la possibilité de renvoyer à la fois des tables et des vues, ou uniquement des tables, mais uniquement pour la base de données principale.
Mise à jour décembre 2021 :Depuis la rédaction de cet article, SQLite a introduit une autre option, que j'ai répertoriée comme une troisième option bonus à la fin de cet article.
La commande .tables
Le moyen le plus simple de renvoyer une liste de tables lors de l'utilisation du shell de ligne de commande SQLite est d'utiliser le .tables
commande.
Cette commande peut être utilisée avec ou sans argument. Si vous l'utilisez sans fournir d'argument, il renvoie toutes les tables (et vues) pour toutes les bases de données attachées.
Exemple :
.tables
Résultat :
Album Employee InvoiceLine PlaylistTrack Artist Genre MediaType Track Customer Invoice Playlist
Dans mon cas, il n'y a qu'une seule base de données attachée (l'exemple de base de données Chinook), et toutes les tables de cette base de données sont renvoyées.
Comme mentionné, vous pouvez également fournir un argument à cette commande. Un tel argument peut être utilisé pour limiter les tables renvoyées par la commande. Par exemple, vous pouvez nommer une table spécifique ou vous pouvez utiliser la correspondance de modèle pour renvoyer uniquement les tables qui correspondent à un modèle donné.
Exemple :
.tables a%
Résultat :
Album Artist
Dans ce cas, seuls les tableaux commençant par la lettre "a" sont renvoyés.
Une chose à garder à l'esprit est que le .tables
la commande renvoie les deux tables et vues. Si vous souhaitez exclure des vues de vos résultats, vous pouvez utiliser la correspondance de modèle pour exclure des vues. Cela ne fonctionnera que si vos vues utilisent une convention de dénomination qui les distingue des tables et autres objets.
Une autre façon d'exclure des vues de vos résultats consiste à interroger le sqlite_schema tableau directement. Bien que ce tableau contienne également des vues, vous pouvez utiliser SQL pour les exclure de vos résultats si nécessaire.
Le tableau sqlite_schema
Chaque base de données SQLite a un sqlite_schema table qui définit le schéma de la base de données. Vous pouvez utiliser cette table pour renvoyer une liste des tables de votre base de données.
Lorsque vous utilisez les .tables
commande, cela revient à faire ceci :
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Cependant, il y a une différence.
La différence est que cette méthode ne renvoie que les résultats pour le primaire base de données (les .tables
la commande renvoie des résultats pour tous bases de données attachées).
L'exécution de la requête ci-dessus renvoie le résultat suivant :
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
Cette requête renvoie les deux tables et vues (tout comme les .tables
commande le fait).
Dans mon cas, il n'y a pas de vues, mais si vous souhaitez exclure des vues dans les résultats, utilisez ceci :
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Résultat :
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
Le sqlite_schema la table est également accessible en utilisant sqlite_master .
Exclure des vues
Par souci d'exhaustivité, voici un exemple rapide qui utilise une base de données avec une vue. Cette base de données contient une table (appelée Produits ) et une vue (appelée vProducts ).
Connectez-vous à SQLite/la base de données :
sqlite3 Store.db
Exécutez le .tables
commande :
.tables
Résultat :
Products vProducts
Interrogez le sqlite_schema table pour les tables et vues :
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Résultat :
Products vProducts
Interrogez maintenant sqlite_schema pour les tableaux uniquement :
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Résultat :
Products
Tableaux temporaires
Le .table
La commande renvoie à la fois les tables permanentes et les tables temporaires. Le sqlite_schema table ne contient que des tables permanentes. Si vous devez renvoyer uniquement les tables temporaires, vous pouvez interroger sqlite_temp_schema ou son synonyme sqlite_temp_master .
Pour renvoyer à la fois des tables permanentes et des tables temporaires, vous pouvez utiliser une requête comme celle-ci :
SELECT name FROM
(SELECT * FROM sqlite_schema UNION ALL
SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;
3ème option bonus :l'instruction pragma table_list
Depuis que j'ai écrit cet article pour la première fois, SQLite a introduit la table_list déclaration pragma, qui répertorie les tables et les vues :
PRAGMA table_list;
Voir PRAGMA
table_list dans SQLite pour un aperçu et des exemples.