sql >> データベース >  >> RDS >> SQLite

SQLiteデータベースのテーブルを一覧表示する2つの方法

    SQLiteで接続されているすべてのデータベースのテーブルのリストを返す2つの方法があります。

    最初のメソッドは、すべてのテーブルをおよび返します。 接続されているすべてのデータベースのビュー。

    2番目の方法では、テーブルとビューの両方、またはテーブルのみを返すオプションが提供されますが、プライマリデータベースのみが返されます。

    2021年12月の更新 :この記事を書いた後、SQLiteは別のオプションを導入しました。これは、この記事の最後にボーナスの3番目のオプションとしてリストされています。

    .tablesコマンド

    SQLiteコマンドラインシェルを使用するときにテーブルのリストを返す最も簡単な方法は、.tablesを使用することです。 指図。

    このコマンドは、引数の有無にかかわらず使用できます。引数を指定せずに使用すると、接続されているすべてのデータベースのすべてのテーブル(およびビュー)が返されます。

    例:

    .tables

    結果:

    Album          Employee       InvoiceLine    PlaylistTrack
    Artist         Genre          MediaType      Track        
    Customer       Invoice        Playlist     

    私の場合、接続されているデータベース(Chinookサンプルデータベース)は1つだけで、このデータベースのすべてのテーブルが返されます。

    前述のように、このコマンドに引数を指定することもできます。このような引数を使用して、コマンドによって返されるテーブルを制限できます。たとえば、特定のテーブルに名前を付けることも、パターンマッチングを使用して、特定のパターンに一致するテーブルのみを返すこともできます。

    例:

    .tables a%

    結果:

    Album   Artist

    この場合、文字「a」で始まるテーブルのみが返されます。

    注意すべき点の1つは、.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;

    ただし、違いがあります。

    違いは、このメソッドは primaryの結果のみを返すことです。 データベース(.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を使用してテーブルにアクセスすることもできます 。

    ビューを除外

    完全を期すために、ビュー付きのデータベースを使用する簡単な例を次に示します。このデータベースには、1つのテーブル(製品と呼ばれる)が含まれています )と1つのビュー( 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 table_list;

    PRAGMAを参照してください 概要と例については、SQLiteのtable_listを参照してください。


    1. データ移行

    2. インデックスを使用してMySQLクエリのパフォーマンスを向上させる方法

    3. Postgres:タイムスタンプを最も近い分に切り上げるまたは切り下げるにはどうすればよいですか?

    4. java.sql.SQLExceptionパラメータインデックスが範囲外です(1>パラメータの数。0)