SQLiteの使い方についてまとめています。
SQLiteは小規模向けシステム用のファイルベースのリレーションデータベース

SQLiteは軽量でアプリケーションに組み込みやすいリレーショナルデータベースです。
一般のDBMSと異なり、サーバープロセスは存在せず、データは単一のファイルに保存します。それでいて、select、insert、update、deleteや結合、likeによるあいまい検索、ソート指定などリレーショナルデータベースの基本機能を備えています。
【関連記事】
▶【コマンドまとめ】SQLiteの特徴やメリットをどこよりも詳しく解説
SQLiteにサンプルデータベースをインストール
実際に、SQLiteを使ってみましょう。
SQLiteには公式サイトにサンプルデータベースが公開されています。まずは、サンプルデータベースをインストールしてみましょう。
参考)SQLite Sample Database And Its Diagram (in PDF format)
以下、linuxでの操作を前提に説明します。インストールといっても、ダウンロードしてzipファイルを解凍するだけです。まずは、wgetコマンドで上記のサンプルデーターベースのリンクアドレスをダウンロードします。
% wget https://www.sqlitetutorial.net/wp-content/uploads/2018/03/chinook.zip --2021-05-29 06:03:31-- https://www.sqlitetutorial.net/wp-content/uploads/2018/03/chinook.zip www.sqlitetutorial.net (www.sqlitetutorial.net) をDNSに問いあわせています... 151.139.128.11 www.sqlitetutorial.net (www.sqlitetutorial.net)|151.139.128.11|:443 に接続し ています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 305596 (298K) [application/zip] `chinook.zip' に保存中 chinook.zip 100%[================>] 298.43K --.-KB/s 時間 0.09s 2021-05-29 06:03:31 (3.12 MB/s) - `chinook.zip' へ保存完了 [305596/305596]
ファイルchinook.zipがダウンロードできます。unzipすると、chinook.dbファイルが解凍されました。
% ls chinook.zip % unzip chinook.zip Archive: chinook.zip inflating: chinook.db % ls chinook.db chinook.zip
SQLiteコマンドを実行
SQLiteのデータベースにアクセスするにはコマンドsqlite3を使います。
% sqlite3 chinook.db SQLite version 3.22.0 2018-01-22 18:45:57 Enter ".help" for usage hints. sqlite>
sqlite>というプロンプトが表示されたら、sqliteのコマンド受付が可能な状態になっています。
.databaseでデータベース一覧、.tableでテーブル一覧、.schema employeesでemployeesテーブルのスキーマを確認してみました。
sqlite> .database
main: /home/user/sqlite/chinook.db
sqlite> .table
albums          employees       invoices        playlists
artists         genres          media_types     tracks
customers       invoice_items   playlist_track
sqlite> .schema employees
CREATE TABLE IF NOT EXISTS "employees"
(
    [EmployeeId] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    [LastName] NVARCHAR(20)  NOT NULL,
    [FirstName] NVARCHAR(20)  NOT NULL,
    [Title] NVARCHAR(30),
    [ReportsTo] INTEGER,
    [BirthDate] DATETIME,
    [HireDate] DATETIME,
    [Address] NVARCHAR(70),
    [City] NVARCHAR(40),
    [State] NVARCHAR(40),
    [Country] NVARCHAR(40),
    [PostalCode] NVARCHAR(10),
    [Phone] NVARCHAR(24),
    [Fax] NVARCHAR(24),
    [Email] NVARCHAR(60),
    FOREIGN KEY ([ReportsTo]) REFERENCES "employees" ([EmployeeId])
                ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_EmployeeReportsTo] ON "employees" ([ReportsTo]);
SQLiteでSQL文を発行する
以下は、employeesテーブルからレコードを10件抽出した例です。カラムの区切りは「|」で表示されています。
sqlite> select * from employees limit 10; 1|Adams|Andrew|General Manager||1962-02-18 00:00:00|2002-08-14 00:00:00|11120 Jasper Ave NW|Edmonton|AB|Canada|T5K 2N1|+1 (780) 428-9482|+1 (780) 428-3457|andrew@chinookcorp.com 2|Edwards|Nancy|Sales Manager|1|1958-12-08 00:00:00|2002-05-01 00:00:00|825 8 Ave SW|Calgary|AB|Canada|T2P 2T3|+1 (403) 262-3443|+1 (403) 262-3322|nancy@chinookcorp.com 3|Peacock|Jane|Sales Support Agent|2|1973-08-29 00:00:00|2002-04-01 00:00:00|1111 6 Ave SW|Calgary|AB|Canada|T2P 5M5|+1 (403) 262-3443|+1 (403) 262-6712|jane@chinookcorp.com 4|Park|Margaret|Sales Support Agent|2|1947-09-19 00:00:00|2003-05-03 00:00:00|683 10 Street SW|Calgary|AB|Canada|T2P 5G3|+1 (403) 263-4423|+1 (403) 263-4289|margaret@chinookcorp.com 5|Johnson|Steve|Sales Support Agent|2|1965-03-03 00:00:00|2003-10-17 00:00:00|7727B 41 Ave|Calgary|AB|Canada|T3B 1Y7|1 (780) 836-9987|1 (780) 836-9543|steve@chinookcorp.com 6|Mitchell|Michael|IT Manager|1|1973-07-01 00:00:00|2003-10-17 00:00:00|5827 Bowness Road NW|Calgary|AB|Canada|T3B 0C5|+1 (403) 246-9887|+1 (403) 246-9899|michael@chinookcorp.com 7|King|Robert|IT Staff|6|1970-05-29 00:00:00|2004-01-02 00:00:00|590 Columbia Boulevard West|Lethbridge|AB|Canada|T1K 5N8|+1 (403) 456-9986|+1 (403) 456-8485|robert@chinookcorp.com 8|Callahan|Laura|IT Staff|6|1968-01-09 00:00:00|2004-03-04 00:00:00|923 7 ST NW|Lethbridge|AB|Canada|T1H 1Y8|+1 (403) 467-3351|+1 (403) 467-8772|laura@chinookcorp.com
select文で結合をおこなうことも可能です。
以下は、albumsテーブルとartistsテーブルの内部結合(INNER JOIN)をおこなってデータを抽出しています。
【関連記事】
▶SQLの内部結合と外部結合の違いを把握しよう!【サンプルコードで解説】
sqlite> SELECT 
    Title,
    Name
FROM 
    albums
INNER JOIN artists 
    ON artists.ArtistId = albums.ArtistId
limit 10;
For Those About To Rock We Salute You|AC/DC
Balls to the Wall|Accept
Restless and Wild|Accept
Let There Be Rock|AC/DC
Big Ones|Aerosmith
Jagged Little Pill|Alanis Morissette
Facelift|Alice In Chains
Warner 25 Anos|Antonio Carlos Jobim
Plays Metallica By Four Cellos|Apocalyptica
Audioslave|Audioslave
以下は、insert文でデータを挿入する例です。挿入後、select文で挿入したデータを確認しています。
sqlite> INSERT INTO artists (name)
 VALUES('Bud Powell');
sqlite> SELECT
 ArtistId,
 Name
 FROM
 Artists
 ORDER BY
 ArtistId DESC
 LIMIT 1;
276|Bud Powell
まとめ


- SQLiteは、アプリケーションへの組み込みがしやすい軽量なデータベース
 - SQLiteはサーバプロセス不要で、データは単一のファイルに保管される
 - SQLiteは、SELECT、INSERT、UPDATE、DELETEなどリレーショナルデータベースの基本機能を搭載している