SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

2 maneiras de listar as tabelas em um banco de dados SQLite


Aqui estão duas maneiras de retornar uma lista de tabelas em todos os bancos de dados anexados no SQLite.

O primeiro método retorna todas as tabelas e visualizações para todos os bancos de dados anexados.

O segundo método oferece a opção de retornar tabelas e visualizações, ou apenas tabelas, mas apenas para o banco de dados primário.

Atualização de dezembro de 2021 :Desde que escrevi este artigo, o SQLite introduziu outra opção, que listei como uma terceira opção de bônus no final deste artigo.

O comando .tables


A maneira mais fácil de retornar uma lista de tabelas ao usar o shell de linha de comando SQLite é usar o .tables comando.

Este comando pode ser usado com ou sem um argumento. Se você usá-lo sem fornecer um argumento, ele retornará todas as tabelas (e exibições) de todos os bancos de dados anexados.

Exemplo:
.tables

Resultado:
Album          Employee       InvoiceLine    PlaylistTrack
Artist         Genre          MediaType      Track        
Customer       Invoice        Playlist     

No meu caso, há apenas um banco de dados anexado (o banco de dados de amostra Chinook) e todas as tabelas desse banco de dados são retornadas.

Conforme mencionado, você também pode fornecer um argumento para este comando. Tal argumento pode ser usado para limitar as tabelas retornadas pelo comando. Por exemplo, você pode nomear uma tabela específica ou pode usar a correspondência de padrões para retornar apenas as tabelas que correspondem a um determinado padrão.

Exemplo:
.tables a%

Resultado:
Album   Artist

Neste caso, apenas as tabelas que começam com a letra “a” são retornadas.

Uma coisa a ter em mente é que o .tables comando retorna ambas as tabelas e Visualizações. Se você quiser excluir visualizações de seus resultados, poderá usar a correspondência de padrões para excluir visualizações. Isso só funcionará se suas visualizações usarem uma convenção de nomenclatura que as distinga de tabelas e outros objetos.

Outra maneira de excluir visualizações de seus resultados é consultar o sqlite_schema mesa diretamente. Embora essa tabela também contenha exibições, você pode usar SQL para excluí-las de seus resultados, se necessário.

A tabela sqlite_schema


Todo banco de dados SQLite tem um sqlite_schema tabela que define o esquema para o banco de dados. Você pode usar esta tabela para retornar uma lista de tabelas em seu banco de dados.

Quando você usa o .tables comando, é semelhante a fazer isso:
SELECT name FROM sqlite_schema 
WHERE type IN ('table','view') 
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;

No entanto, há uma diferença.

A diferença é que este método só retorna resultados para o primário banco de dados (o .tables comando retorna resultados para todos bancos de dados anexados).

A execução da consulta acima retorna o seguinte resultado:
Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
Track

Essa consulta retorna ambas as tabelas e views (assim como o .tables comando faz).

No meu caso não há visualizações, mas se você quiser excluir visualizações nos resultados, use isto:
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

O sqlite_schema tabela também pode ser acessada usando sqlite_master .

Excluir visualizações


Por uma questão de completude, aqui está um exemplo rápido que usa um banco de dados com uma visão. Este banco de dados contém uma tabela (chamada Produtos ) e uma visualização (chamada vProducts ).

Conecte-se ao SQLite/banco de dados:
sqlite3 Store.db

Execute o .tables comando:
.tables

Resultado:
Products   vProducts

Consulte o sqlite_schema tabela para tabelas e Visualizações:
SELECT name FROM sqlite_schema 
WHERE type IN ('table','view') 
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;

Resultado:
Products
vProducts

Agora consulte sqlite_schema para tabelas somente :
SELECT name FROM sqlite_schema 
WHERE type = 'table' 
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;

Resultado:
Products

Tabelas temporárias


O .table O comando retorna tabelas permanentes e tabelas temporárias. O sqlite_schema table contém apenas tabelas permanentes. Se você precisar retornar apenas as tabelas temporárias, poderá consultar sqlite_temp_schema ou seu sinônimo sqlite_temp_master .

Para retornar tabelas permanentes e tabelas temporárias, você pode usar uma consulta como esta:
SELECT name FROM 
   (SELECT * FROM sqlite_schema UNION ALL
    SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;

3ª opção de bônus:a declaração de pragma table_list


Desde que escrevi este artigo, o SQLite introduziu a table_list pragma, que lista tabelas e visualizações:
PRAGMA table_list;

Consulte PRAGMA table_list no SQLite para uma visão geral e exemplos.