Aquí hay dos formas de devolver una lista de tablas en todas las bases de datos adjuntas en SQLite.
El primer método devuelve todas las tablas y vistas para todas las bases de datos adjuntas.
El segundo método le brinda la opción de devolver tablas y vistas, o solo tablas, pero solo para la base de datos principal.
Actualización de diciembre de 2021 :Desde que escribí este artículo, SQLite ha introducido otra opción, que he enumerado como una tercera opción adicional al final de este artículo.
El comando .tables
La forma más fácil de devolver una lista de tablas cuando se usa el shell de línea de comandos de SQLite es usar .tables
dominio.
Este comando se puede usar con o sin un argumento. Si lo usa sin proporcionar un argumento, devuelve todas las tablas (y vistas) para todas las bases de datos adjuntas.
Ejemplo:
.tables
Resultado:
Album Employee InvoiceLine PlaylistTrack Artist Genre MediaType Track Customer Invoice Playlist
En mi caso, solo hay una base de datos adjunta (la base de datos de ejemplo de Chinook) y se devuelven todas las tablas de esta base de datos.
Como se mencionó, también puede proporcionar un argumento a este comando. Tal argumento se puede usar para limitar las tablas devueltas por el comando. Por ejemplo, puede nombrar una tabla específica o puede usar la coincidencia de patrones para devolver solo tablas que coincidan con un patrón determinado.
Ejemplo:
.tables a%
Resultado:
Album Artist
En este caso solo se devuelven las tablas que comienzan con la letra “a”.
Una cosa a tener en cuenta es que .tables
el comando devuelve ambas tablas y puntos de vista. Si desea excluir vistas de sus resultados, puede usar la coincidencia de patrones para excluir vistas. Esto solo funcionará si sus vistas utilizan una convención de nomenclatura que las distingue de las tablas y otros objetos.
Otra forma de excluir vistas de sus resultados es consultar el sqlite_schema mesa directamente. Aunque esta tabla también contiene vistas, puede usar SQL para excluirlas de sus resultados si es necesario.
La tabla sqlite_schema
Cada base de datos SQLite tiene un sqlite_schema tabla que define el esquema de la base de datos. Puede usar esta tabla para devolver una lista de tablas en su base de datos.
Cuando usas .tables
comando, es similar a hacer esto:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Sin embargo, hay una diferencia.
La diferencia es que este método solo devuelve resultados para el principal base de datos (las .tables
el comando devuelve resultados para todos bases de datos adjuntas).
Ejecutar la consulta anterior devuelve el siguiente resultado:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
Esa consulta devuelve ambas tablas y vistas (al igual que las .tables
el comando lo hace).
En mi caso no hay vistas, pero si quieres excluir vistas en los resultados, usa esto:
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Resultado:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
El sqlite_schema También se puede acceder a la tabla usando sqlite_master .
Excluir vistas
En aras de la exhaustividad, aquí hay un ejemplo rápido que usa una base de datos con una vista. Esta base de datos contiene una tabla (llamada Productos ) y una vista (llamada vProducts ).
Conéctese a SQLite/la base de datos:
sqlite3 Store.db
Ejecute .tables
comando:
.tables
Resultado:
Products vProducts
Consulta el sqlite_schema mesa para mesas y vistas:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Resultado:
Products vProducts
Ahora consulta sqlite_schema para tablas solo :
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Resultado:
Products
Mesas Temporales
La .table
El comando devuelve tablas permanentes y tablas temporales. El sqlite_schema table solo contiene tablas permanentes. Si necesita devolver solo las tablas temporales, puede consultar sqlite_temp_schema o su sinónimo sqlite_temp_master .
Para devolver tablas permanentes y tablas temporales, puede usar una consulta como esta:
SELECT name FROM
(SELECT * FROM sqlite_schema UNION ALL
SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;
Tercera opción adicional:la declaración pragmática de table_list
Desde que escribí este artículo por primera vez, SQLite ha introducido la table_list instrucción pragma, que enumera tablas y vistas:
PRAGMA table_list;
Ver PRAGMA
table_list en SQLite para obtener una descripción general y ejemplos.