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.