Ето два начина за връщане на списък с таблици във всички прикачени бази данни в SQLite.
Първият метод връща всички таблици и изгледи за всички прикачени бази данни.
Вторият метод ви дава възможност да връщате както таблици, така и изгледи, или само таблици, но само за основната база данни.
Актуализиране през декември 2021 г. :От написването на тази статия SQLite въведе друга опция, която посочих като бонус трета опция в края на тази статия.
Командата .tables
Най-лесният начин да върнете списък с таблици, когато използвате обвивката на командния ред на SQLite, е да използвате .tables
команда.
Тази команда може да се използва със или без аргумент. Ако го използвате без да предоставите аргумент, той връща всички таблици (и изгледи) за всички прикачени бази данни.
Пример:
.tables
Резултат:
Album Employee InvoiceLine PlaylistTrack Artist Genre MediaType Track Customer Invoice Playlist
В моя случай има само една прикачена база данни (примерната база данни на Chinook) и всички таблици на тази база данни се връщат.
Както споменахме, можете също да предоставите аргумент на тази команда. Такъв аргумент може да се използва за ограничаване на таблиците, върнати от командата. Например, можете да наименувате конкретна таблица или можете да използвате съвпадение на шаблон, за да върнете само таблици, които съответстват на даден модел.
Пример:
.tables a%
Резултат:
Album Artist
В този случай се връщат само таблици, които започват с буквата „a“.
Едно нещо, което трябва да имате предвид е, че .tables
командата връща и двете таблици и изгледи. Ако искате да изключите изгледи от резултатите си, можете да използвате съвпадение на шаблони, за да изключите изгледи. Това ще работи само ако изгледите ви използват конвенция за именуване, която ги отличава от таблици и други обекти.
Друг начин да изключите изгледи от резултатите си е да направите заявка за sqlite_schema маса директно. Въпреки че тази таблица също съдържа изгледи, можете да използвате SQL, за да ги изключите от вашите резултати, ако е необходимо.
Таблицата sqlite_schema
Всяка база данни на SQLite има sqlite_schema таблица, която дефинира схемата за базата данни. Можете да използвате тази таблица, за да върнете списък с таблици във вашата база данни.
Когато използвате .tables
команда, това е подобно на това:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Все пак има разлика.
Разликата е, че този метод връща резултати само за основния база данни (.tables
командата връща резултати за всички прикачени бази данни).
Изпълнението на горната заявка връща следния резултат:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
Тази заявка връща и двете таблици и изгледи (точно както .tables
команда прави).
В моя случай няма изгледи, но ако искате да изключите изгледи в резултатите, използвайте това:
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Резултат:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
sqlite_schema таблицата може да бъде достъпна и чрез sqlite_master .
Изключване на изгледи
За пълнота, ето един бърз пример, който използва база данни с изглед. Тази база данни съдържа една таблица (наречена Продукти). ) и един изглед (наречен vProducts). ).
Свържете се със SQLite/базата данни:
sqlite3 Store.db
Стартирайте .tables
команда:
.tables
Резултат:
Products vProducts
Заявете за sqlite_schema таблица за таблици и изгледи:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Резултат:
Products vProducts
Сега заявете sqlite_schema за таблици само :
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Резултат:
Products
Временни таблици
.table
командата връща както постоянни, така и временни таблици. sqlite_schema таблицата съдържа само постоянни таблици. Ако трябва да върнете само временните таблици, можете да заявите sqlite_temp_schema или неговия синоним sqlite_temp_master .
За да върнете както постоянни, така и временни таблици, можете да използвате заявка като тази:
SELECT name FROM
(SELECT * FROM sqlite_schema UNION ALL
SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;
Бонус 3-та опция:Прагматичната декларация table_list
Откакто за първи път написах тази статия, SQLite въведе table_list изявление на pragma, което изброява таблици и изгледи:
PRAGMA table_list;
Вижте PRAGMA
table_list в SQLite за преглед и примери.