バナー画像

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

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。