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などリレーショナルデータベースの基本機能を搭載している