sql >> Base de Datos >  >> RDS >> SQLite

2 formas de enumerar las tablas en una base de datos SQLite

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.