関係データベース(リレーショナルデータベース)やSQLを学習するのに一番手頃なデータベース管理システム(DBMS) は「SQLite」だと思います。
以下、Windows PCへのインストール(ダウンロードして解凍するだけ)と使い方の備忘録です。
インストール
https://www.sqlite.org/download.html
こちらのページから、Precompiled Binaries for Windows の sqlite-tools-win32-x86-3200000.zip をクリックしてダウンロード。
解凍すると3つファイルが入っていますが、sqlite3.exe だけ使います。
※ファイルの解凍がわからない方は、「ファイル 解凍」でGoogle検索してみて下さい。
デスクトップなどの適当な場所に、sqlite という名前のフォルダを作り、その中にsqlite3.exe を置きます。
※アンインストールしたい場合は、ファイルを削除するだけです。
コマンドプロンプトを起動
「ファイル名を指定して実行」に
cmd
と入力します。
「ファイル名を指定して実行」を開くには
[Windows]+R
コマンド「cd」で作業フォルダの場所を切り替える
先程作ったsqliteフォルダへ作業フォルダの場所を切り替えます。
sqliteフォルダを開いて、赤線部分のパスをコピーして、
コマンドプロンプトの画面に「cd」「スペース」を書いてから貼り付けた方が楽です。
この状態でEnterを押すと、下のように場所が切り替わりました。
SQLiteを起動
SQLiteを起動する時はデータベースを指定します。
指定したデータベースがない場合は新規作成。指定したデータベースがある場合は、そのデータベースを読み込みます。
今回は新規作成で「test.db」という名前のデータベースを作ります。
拡張子はなんとなく.dbにしていますが、.sqliteでもいいし、なくてもかまいません。
1 |
sqlite3 test.db |
と入力してEnterすると下の画像のようになります。
※SQLiteを終了する場合のコマンドは、
1 |
.exit |
でEnterです。
テーブルを作ってみる
データベースは表計算と違って、最初にテーブルを作成しないとデータを追加できません。
今回は下の画像のようなテーブルを作成してデータを追加したいと思います。
(画像はイメージで、実際は列名下の空の行はありません)
列の名前(フィールド名)は「連番」と「氏名」と「性別」と「年齢」と「出身地」と「血液型」です。
SQLiteのフィールドの型は5種類しかなくて非常にシンプルです。
- NULL. 値はNULL値です。
- INTEGER. 値は符号付き整数で、値の大きさに応じて1,2,3,4,6、または8バイトに格納されます。
- REAL. 値は浮動小数点値で、8バイトのIEEE浮動小数点数として格納されます。
- TEXT. 値は、データベースエンコーディング(UTF-8、UTF-16BEまたはUTF-16LE)を使用して格納されたテキスト文字列です。
- BLOB. 値は、入力されたとおりに保存されたデータの塊です。
今回は「連番」と「年齢」をinteger、残りはtextにしました。
「連番」を主キー(primary key)にしています。
主キーとは、テーブル内のレコードを一意(1つの情報が特定できる状態)に識別するためのフィールドです。
以下、テーブル作成のSQLです。
テーブルの名前は「名簿」にしました。
1 |
create table 名簿(連番 integer primary key,氏名 text,性別 text,年齢 integer,出身地 text,血液型 text); |
テーブルができたかどうかの確認のために以下のように入力してみます。
1 |
.tables |
下の画像のように「名簿」と表示されればテーブルはできています。
テーブルにデータを追加してみる
データの追加はINSERT文です。
すべてのフィールド名を追加する場合。
INSERT INTO テーブル名 VALUES(値1, 値2, …);
フィールド名を特定して追加する場合。
INSERT INTO テーブル名(フィールド名1, フィールド名2, …) VALUES(値1, 値2, …);
一行追加してみます。
1 |
insert into 名簿 values(1,'市原直美','女',50,'佐賀県','AB'); |
数字はそのままでいいですが、文字列はシングルクォーテーションで囲みます。
テーブルのデータを表示してみる
データの表示はSELECT文です。
フィールド名を指定して表示する場合。
SELECT フィールド名1, フィールド名2, … FROM テーブル名;
すべてのフィールド名を表示する場合。
SELECT * FROM テーブル名;
先程入力したものを表示させてみます。
1 |
select * from 名簿; |
下の画像のようになります。
見やすくするために、SQLiteの設定を変えます。
.showコマンドを入力すると下のようになります。
初期設定ではこうなのですが、headers: offとmode: listを変更してみます。
.headers onと.mode columnを入力してから、先程のSELECT文を入力します。
表示が変わりました。
テーブルにデータをインポートしてみる
※ここで使用しているデータは、疑似個人情報データ生成サービスというサイトで生成した疑似個人情報です。実在の個人情報ではありません。
先程一人追加しましたが、一人ひとりINSERT文で追加していくのは面倒なので、一気にインポートしてみようと思います。
まず、このような形式のテキストファイルを用意して(先程一人入力しましたので、2人目の人から100人目の人までのデータ)、文字コードはUTF-8で、sqlite3.exeのある先程作ったsqliteフォルダの中に入れます。
data.txtになっていますが、拡張子はdata.csvでもかまいません。
そして、このデータはカンマがセパレータになっているので、SQLiteのセパレータの設定もカンマに変更します。
1 |
.separator , |
それから「名簿」テーブルにインポートします。
1 |
.import data.txt 名簿 |
そして、全部表示するSELECT文をまた入力してみます。
1 |
select * from 名簿; |
下の画像のようになると思います。
色々なSELECT文を試してみる
WHERE句の例。
連番が5のものを検索しています。表示するのは氏名と性別です。
1 |
select 氏名,性別 from 名簿 where 連番=5; |
BETWEEN句の例。
連番が10から20まで検索します。表示するのは氏名と性別です。
1 |
select 氏名,性別 from 名簿 where 連番 between 10 and 20; |
IN句の例。
連番が1と3と5を検索します。表示するのは氏名だけです。
1 |
select 氏名 from 名簿 where 連番 in(1,3,5); |
LIKE句の例。
アンダースコア「_」(任意の1文字)3つで「県」で終わるものを検索しています。表示するのは氏名と出身地です。
(%を使うと、任意の0文字以上の文字列です)
1 |
select 氏名,出身地 from 名簿 where 出身地 like '___県'; |
count関数の例。
行数を取得するためによく使います。
1 |
select count(*) from 名簿; |
GROUP BY句の例。
血液型でグループ化して、その件数を表示します。
AS句を使って、フィールド名を「集計」に変えています。
1 |
select 血液型,count(*) as 集計 from 名簿 group by 血液型; |
その他の機能
ここでは説明しきれませんが、SQLiteは以下のようなこともできますので、興味のある方は調べてみて下さい。
- データベースは通常複数のテーブルを作ります。複数のテーブルを結合して複雑なSELECT文ができます。
- ビューと呼ばれる機能があります。特定のSELECT文の結果を普通のテーブルのように使えます。
- トリガーを作成できます。あるテーブルが更新されたら、別のテーブルも更新するなどのことができます。
- CASE句を利用して条件式が記述できます。
- BEGIN、COMMIT、ROLLBACKでトランザクションの操作ができます。
- count関数以外にも色々な関数があります。