Berikut adalah dua cara untuk mengembalikan daftar tabel di semua database terlampir di SQLite.
Metode pertama mengembalikan semua tabel dan tampilan untuk semua database terlampir.
Metode kedua memberi Anda opsi untuk mengembalikan tabel dan tampilan, atau hanya tabel, tetapi hanya untuk database utama.
Perbarui Des 2021 :Sejak menulis artikel ini, SQLite telah memperkenalkan opsi lain, yang saya cantumkan sebagai opsi bonus ketiga di akhir artikel ini.
Perintah .tables
Cara termudah untuk mengembalikan daftar tabel saat menggunakan shell baris perintah SQLite adalah dengan menggunakan .tables
memerintah.
Perintah ini dapat digunakan dengan atau tanpa argumen. Jika Anda menggunakannya tanpa memberikan argumen, ia mengembalikan semua tabel (dan tampilan) untuk semua database yang dilampirkan.
Contoh:
.tables
Hasil:
Album Employee InvoiceLine PlaylistTrack Artist Genre MediaType Track Customer Invoice Playlist
Dalam kasus saya, hanya ada satu database terlampir (database sampel Chinook), dan semua tabel database ini dikembalikan.
Seperti yang disebutkan, Anda juga dapat memberikan argumen untuk perintah ini. Argumen seperti itu dapat digunakan untuk membatasi tabel yang dikembalikan oleh perintah. Misalnya, Anda bisa memberi nama tabel tertentu, atau Anda bisa menggunakan pencocokan pola untuk mengembalikan hanya tabel yang cocok dengan pola tertentu.
Contoh:
.tables a%
Hasil:
Album Artist
Dalam hal ini hanya tabel yang dimulai dengan huruf “a” yang dikembalikan.
Satu hal yang harus diperhatikan adalah bahwa .tables
perintah mengembalikan kedua tabel dan dilihat. Jika Anda ingin mengecualikan tampilan dari hasil Anda, Anda dapat menggunakan pencocokan pola untuk mengecualikan tampilan. Ini hanya akan berfungsi jika tampilan Anda menggunakan konvensi penamaan yang membedakannya dari tabel dan objek lain.
Cara lain untuk mengecualikan tampilan dari hasil Anda adalah dengan menanyakan sqlite_schema meja secara langsung. Meskipun tabel ini juga berisi tampilan, Anda dapat menggunakan SQL untuk mengecualikannya dari hasil Anda jika perlu.
Tabel sqlite_schema
Setiap database SQLite memiliki sqlite_schema tabel yang mendefinisikan skema untuk database. Anda dapat menggunakan tabel ini untuk mengembalikan daftar tabel di database Anda.
Saat Anda menggunakan .tables
perintah, ini mirip dengan melakukan ini:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Namun, ada perbedaan.
Perbedaannya adalah metode ini hanya mengembalikan hasil untuk utama database (.tables
perintah mengembalikan hasil untuk semua database terlampir).
Menjalankan kueri di atas akan mengembalikan hasil berikut:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
Kueri itu mengembalikan kedua tabel dan tampilan (seperti .tables
perintah tidak).
Dalam kasus saya tidak ada tampilan, tetapi jika Anda ingin mengecualikan tampilan dalam hasil, gunakan ini:
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Hasil:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
sqlite_schema tabel juga dapat diakses dengan menggunakan sqlite_master .
Kecualikan Tampilan
Demi kelengkapan, berikut adalah contoh cepat yang menggunakan database dengan tampilan. Basis data ini berisi satu tabel (disebut Produk ) dan satu tampilan (disebut vProducts ).
Hubungkan ke SQLite/database:
sqlite3 Store.db
Jalankan .tables
perintah:
.tables
Hasil:
Products vProducts
Buat kueri sqlite_schema tabel untuk tabel dan dilihat:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Hasil:
Products vProducts
Sekarang kueri sqlite_schema untuk tabel hanya :
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Hasil:
Products
Tabel Sementara
.table
perintah mengembalikan tabel permanen dan tabel sementara. sqlite_schema tabel hanya berisi tabel permanen. Jika Anda hanya perlu mengembalikan tabel sementara, Anda dapat meminta sqlite_temp_schema atau sinonimnya sqlite_temp_master .
Untuk mengembalikan tabel permanen dan tabel sementara, Anda dapat menggunakan kueri seperti ini:
SELECT name FROM
(SELECT * FROM sqlite_schema UNION ALL
SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;
Bonus Opsi Ketiga:Pernyataan Pragma table_list
Sejak saya pertama kali menulis artikel ini, SQLite telah memperkenalkan table_list pernyataan pragma, yang mencantumkan tabel dan tampilan:
PRAGMA table_list;
Lihat PRAGMA
table_list di SQLite untuk ikhtisar dan contoh.