SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

2 cách liệt kê các bảng trong cơ sở dữ liệu SQLite

Đây là hai cách để trả về danh sách các bảng trong tất cả các cơ sở dữ liệu đính kèm trong SQLite.

Phương thức đầu tiên trả về tất cả các bảng xem cho tất cả các cơ sở dữ liệu đính kèm.

Phương pháp thứ hai cung cấp cho bạn tùy chọn trả về cả bảng và dạng xem, hoặc chỉ bảng, nhưng chỉ cho cơ sở dữ liệu chính.

Cập nhật tháng 12 năm 2021 :Kể từ khi viết bài này, SQLite đã giới thiệu một tùy chọn khác, mà tôi đã liệt kê là tùy chọn thứ ba bổ sung ở cuối bài viết này.

Lệnh .tables

Cách dễ nhất để trả về danh sách các bảng khi sử dụng trình bao dòng lệnh SQLite là sử dụng .tables yêu cầu.

Lệnh này có thể được sử dụng có hoặc không có đối số. Nếu bạn sử dụng nó mà không cung cấp đối số, nó sẽ trả về tất cả các bảng (và dạng xem) cho tất cả các cơ sở dữ liệu đính kèm.

Ví dụ:

.tables

Kết quả:

Album          Employee       InvoiceLine    PlaylistTrack
Artist         Genre          MediaType      Track        
Customer       Invoice        Playlist     

Trong trường hợp của tôi, chỉ có một cơ sở dữ liệu đính kèm (cơ sở dữ liệu mẫu Chinook) và tất cả các bảng của cơ sở dữ liệu này đều được trả về.

Như đã đề cập, bạn cũng có thể cung cấp một đối số cho lệnh này. Một đối số như vậy có thể được sử dụng để giới hạn các bảng được trả về bởi lệnh. Ví dụ:bạn có thể đặt tên cho một bảng cụ thể hoặc bạn có thể sử dụng đối sánh mẫu để chỉ trả về các bảng phù hợp với một mẫu nhất định.

Ví dụ:

.tables a%

Kết quả:

Album   Artist

Trong trường hợp này, chỉ các bảng bắt đầu bằng chữ cái “a” được trả về.

Một điều cần lưu ý là .tables lệnh trả về cả hai bảng lượt xem. Nếu bạn muốn loại trừ các chế độ xem khỏi kết quả của mình, bạn có thể sử dụng đối sánh mẫu để loại trừ các chế độ xem. Điều này sẽ chỉ hoạt động nếu các chế độ xem của bạn sử dụng quy ước đặt tên để phân biệt chúng với các bảng và các đối tượng khác.

Một cách khác để loại trừ các lượt xem khỏi kết quả của bạn là truy vấn sqlite_schema bàn trực tiếp. Mặc dù bảng này cũng chứa các dạng xem, bạn có thể sử dụng SQL để loại trừ chúng khỏi kết quả của mình nếu cần.

Bảng sqlite_schema

Mọi cơ sở dữ liệu SQLite đều có sqlite_schema bảng xác định lược đồ cho cơ sở dữ liệu. Bạn có thể sử dụng bảng này để trả về danh sách các bảng trong cơ sở dữ liệu của mình.

Khi bạn sử dụng .tables lệnh, nó tương tự như thực hiện điều này:

SELECT name FROM sqlite_schema 
WHERE type IN ('table','view') 
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;

Tuy nhiên, có một sự khác biệt.

Sự khác biệt là phương pháp này chỉ trả về kết quả cho chính cơ sở dữ liệu (.tables lệnh trả về kết quả cho tất cả cơ sở dữ liệu đính kèm).

Chạy truy vấn trên trả về kết quả sau:

Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
Track

Truy vấn đó trả về cả hai bảng chế độ xem (giống như .tables lệnh không).

Trong trường hợp của tôi, không có bất kỳ lượt xem nào, nhưng nếu bạn muốn loại trừ lượt xem trong kết quả, hãy sử dụng cái này:

SELECT name FROM sqlite_schema 
WHERE type = 'table' 
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;

Kết quả:

Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
Track

sqlite_schema cũng có thể được truy cập bảng bằng cách sử dụng sqlite_master .

Loại trừ Lượt xem

Để đầy đủ, dưới đây là một ví dụ nhanh sử dụng cơ sở dữ liệu với một chế độ xem. Cơ sở dữ liệu này chứa một bảng (được gọi là Sản phẩm ) và một chế độ xem (được gọi là vProducts ).

Kết nối với SQLite / cơ sở dữ liệu:

sqlite3 Store.db

Chạy .tables lệnh:

.tables

Kết quả:

Products   vProducts

Truy vấn sqlite_schema bảng cho bảng lượt xem:

SELECT name FROM sqlite_schema 
WHERE type IN ('table','view') 
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;

Kết quả:

Products
vProducts

Bây giờ hãy truy vấn sqlite_schema dành cho bảng chỉ :

SELECT name FROM sqlite_schema 
WHERE type = 'table' 
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;

Kết quả:

Products

Bảng tạm thời

.table lệnh trả về cả bảng vĩnh viễn và bảng tạm thời. sqlite_schema bảng chỉ chứa các bảng vĩnh viễn. Nếu bạn chỉ cần trả lại các bảng tạm thời, bạn có thể truy vấn sqlite_temp_schema hoặc từ đồng nghĩa của nó sqlite_temp_master .

Để trả về cả bảng vĩnh viễn và bảng tạm thời, bạn có thể sử dụng truy vấn như sau:

SELECT name FROM 
   (SELECT * FROM sqlite_schema UNION ALL
    SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;

Tùy chọn thứ 3 có thưởng:Tuyên bố của table_list Pragma

Kể từ lần đầu tiên tôi viết bài viết này, SQLite đã giới thiệu table_list câu lệnh pragma, liệt kê các bảng và dạng xem:

PRAGMA table_list;

Xem PRAGMA table_list trong SQLite để biết tổng quan và ví dụ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đóng con trỏ đúng cách trong Android

  2. Trả về Cuối tháng trong SQLite

  3. nếu bảng của tôi có 4 cột và tôi muốn lấy cột thứ 3 thì tôi phải làm gì.

  4. SQLite - Chèn dữ liệu

  5. Không thể liên kết đối số tại chỉ mục 2 vì chỉ mục nằm ngoài phạm vi