SQLiteの環境構築から使い方までを解説します。

RDBMSとは

RDBMSは、リレーショナルデータベース管理システム (Relational Database Management System) の略称です。リレーショナルデータベースを管理するためのソフトウェアのことを指します。代表的なRDBMSには、Oracle Database、MySQL、PostgreSQL、SQLiteなどがあります。

RDBMSの特徴は以下になります。
1. データを表形式で管理し、テーブル間の関連性(リレーション)を定義できる。
2. SQL言語を使用してデータの操作や検索が行える。
3. データの整合性を保つために、トランザクション管理機能やACID特性(原子性、一貫性、独立性、耐久性)を備えている。
4. データの同時アクセスを制御し、不整合を防ぐためのロック機構を持つ。
5. バックアップやリカバリ機能により、データの安全性と可用性を確保できる。

SQLiteとは

SQLiteは、軽量でシンプルなRDBMSの一つです。サーバーが不要で、一般的なSQLが使え、Windows、Linuxなど多くのプラットフォームで動作できます。
また、ライセンス料なしで自由に使用できます。

SQLiteのインストール(Windows OS版)

1.SQLiteの公式サイトからコマンドラインツールをダウンロード
⇒今回は公式サイトの「sqlite-tools-win-x64-3450300.zip」を選択する

2.コマンドプロンプトで、sqlite実行ファイルが存在するフォルダに移動

3.データベースを作成する
sqlite3 database.db
このコマンドを実行すると、指定した名前のデータベースファイルが作成され、SQLiteのコマンドライン(CLI)が起動します。

SQLiteのテーブル作成

SQLiteでテーブルを作成するには、CREATE TABLE文を使用します。
CREATE TABLE user_tb (
id integer primary key, name varchar(8) );
CREATE TABLEは、新しいテーブルを作成するSQL文です。
user_tbは、作成するテーブルの名前です。
()内には、テーブルの列(カラム)の定義が記述されます。

idは、整数型(integer)の列で、主キー(primary key)に指定されています。
nameは、最大8文字の可変長文字列型(varchar(8))です。

このSQL文を実行すると、user_tbという名前のテーブルがデータベースに作成されます。id列は主キーとして設定され、各レコードを一意に識別するために使用されます。

テーブルにデータ追加

INSERT INTO文で、user_tbテーブルにデータを追加します。VALUESの後に、挿入するデータの値をカンマで区切って列挙します。各行は()で囲み、行間はカンマで区切ります。
INSERT INTO user_tb (id, name) VALUES
  (1, '田中'),
  (2, '佐藤'),
  (3, '鈴木'),
  (4, '山田'),
  (5, '伊藤'),
  (6, '渡辺'),
  (7, '小林'),
  (8, '加藤'),
  (9, '吉田'),
  (10, '山本');

SQLiteのCLIから、以下のコマンドで、テーブルデータを確認できます。
select * from user_tb;

CSVファイルのインポート

CSVファイルをインポートするには、SQLiteのCLIから以下のSQL文を実行します。
.mode csv
.import /path/to/file.csv user_tb
※CSVファイルのヘッダー行は、デフォルトではインポートされません。ヘッダー行を含める場合は、.importコマンドに--skip 1オプションを追加します

テーブルデータの検索

user_tbテーブルから、名前に"田"が含まれる人を検索します。
SELECT * FROM user_tb WHERE name LIKE '%田%';
FROM user_tbは、user_tbテーブルからデータを取得することを指定しています。
WHEREは、検索条件を指定するためのキーワードです。
name LIKE '%田%'は、name列の値が"田"を含む行を検索する条件です。
LIKEは、パターンマッチングを行うための演算子です。
・%は、任意の文字列を表すワイルドカード文字です。
・'%田%'は、"田"の前後に任意の文字列が存在する名前にマッチするパターンです。

出力結果は以下になります。
1|田中
4|山田
9|吉田

テーブルデータの集計

先ほどのuser_tbテーブルに、年齢(age)と役職(title)を付与したuser_titleテーブルを用意します。
INSERT INTO user_tb (id, name, age, title) VALUES
(1, '田中', 23, '一般'),
(2, '佐藤', 33, '主任'),
(3, '鈴木', 58, '課長'),
(4, '山田', 25, '一般'),
(5, '伊藤', 37, '主任'),
(6, '渡辺', 45, '課長'),
(7, '小林', 31, '一般'),
(8, '加藤', 29, '一般'),
(9, '吉田', 34, '主任'),
(10, '山本', 20, '一般');

user_titleテーブルから、役職別に平均年齢を集計するSQL文を作成します。
SELECT 
    title,
    AVG(age) AS avg_age
FROM 
    user_title
GROUP BY 
    title;
SELECT 句で、title列と AVG(age) を選択します。AVG(age)は役職別の年齢の平均値を計算します。
FROM 句で、user_titleテーブルを指定します。
GROUP BY句で、title列でグループ化します。各役職ごとに年齢の平均値が計算されます。

GROUP BY句は、任意のカラムの値に基づいてレコードをグループ化するのに用いられるクエリです。集計関数(AVGやCOUNTなど)と併用することで「役職ごとの人数を調べる」というように、グループごとの平均値やレコード数を求めることができます。

出力結果は以下になります。
一般|35.0
主任|44.6666666666667
課長|59.5