データベースを操作する際に、SQLという言語がある。

SQL - Wikipedia


SQLは、検索を行うアプリ等で頻繁に使われる。


以下の文はWindows 10での操作。

https://www.sqlite.org/index.htmlからSQLiteをダウンロードする。この時、 https://sqlitebrowser.org/からDB browser for sqliteもダウンロードしてインストールしておく。


SQLiteのインストール手順は

SQLite Download PageでPrecompiled Binaries for Windowsにあるsqlite-tools-win32-x86-3240000.zipをダウンロードしてきて、

ダウンロード後にzipファイルを解凍する。


解凍後のフォルダをCドライブ直下に移動し、

C:\sqlite3\sqlite3.exe

になるようにフォルダ名のリネームと配置し、

システムの環境変数の編集でsqlite3にパスを通す。


パスを通す手順は

cortana_search_env

画面左下にあるcortana検索で「環境変数」で検索すると結果にあがるシステム環境変数の編集を選択し、


env_edit_w

システムのプロパティの画面で環境変数のボタンを押し、


env_edit1_w

環境変数の画面でシステム環境変数のPathの項目を選んで編集画面を押す。

画面が切り替わったら、

新規で「C:\sqlite3\」を追加してSQLite3のインストールは終了。




今回は、下記のデータをtableで作成して、DB browser for sqliteで表示してみる。

idnamefnamegender
1ryokosaitof
2tuyoshisaitom

メモ帳に下記のsql文を仮で作成しておく。

CREATE TABLE users(
	id INTEGER PRIMARY KEY AUTOINCREMENT,
	name VARCHAR(8),
	fname VARCHAR(8),
	gender CHAR(1)
);

CREATE TABLE usersでusersという名前の表(テーブル)を作成する。

id(識別子)、name(名前)、fname(名字)やgender(性別)といった項目はフィールドと呼び、

id INTEGER PRIMARY KEY AUTOINCREMENTでは、idが整数で最も重要なフィールドであることを意味している。

name VARCHAR(8)は、VARCHARが可変長配列の型という意味で、(8)は8文字までnameの文字数を入れることができる。gender CHAR(1)のCHARは、固定長配列を意味し、genderの(1)でfかmかの一文字を指定する。

ここで、workspace/sql/以下にsample.dbというファイルを作成する。ファイルの中は空にしておく。

コマンドプロンプトを開き、下記のコマンドを記載する。

C:\Users\Ryoko Saito>cd workspace/sql

C:\Users\Ryoko Saito\workspace\sql>sqlite3 sample.db
SQLite version 3.24.0 2018-06-04 19:24:41
Enter ".help" for usage hints.
sqlite> CREATE TABLE users(
...> id INTEGER PRIMARY KEY AUTOINCREMENT,
...> name VARCHAR(8),
...> fname VARCHAR(8),
...> gender CHAR(1)
...> );
sqlite> .schema

まず、sql構文を実行するときは、sqliteから始める。上記メモ帳で書いたsql文をコピペし実行する。sqlite> .schemaで実際にsample.dbに作成されたかを確認する。

そうすると、上記の記載したsql構文が再び表示される。実際にデータベースの内容をコマンドプロンプトではなくて、DB browser for sqliteで確認もできる。

次にデータを挿入してみる。

sqlite> INSERT INTO users(name,fname,gender)VALUES('ryoko','saito','f');
sqlite> SELECT * FROM users;
1|ryoko|saito|f

INSERT INTO usersが、usersにデータを挿入するという意味で、この後に、各fieldに対応したデータを''を使って記載する。SELECT * FROM users;でデータを取り出すという意味になる。

他のデータも追加してみる。

sqlite> INSERT INTO users(name,fname,gender)VALUES('kuma','kumasann','m');
sqlite> INSERT INTO users(name,fname,gender)VALUES('usa','usakosan','f');
sqlite> INSERT INTO users(name,fname,gender)VALUES('paopom','zousan','m');
sqlite> INSERT INTO users(name,fname,gender)VALUES('dorachan','doradora','m');
sqlite> INSERT INTO users(name,fname,gender)VALUES('dorachan','doradora','m');

sqlite> SELECT * FROM users;
1|ryoko|saito|f
2|kuma|kumasann|m
3|usa|usakosan|f
4|paopom|zousan|m
5|dorachan|doradora|m
6|dorachan|doradora|m

ここで、'dorachan'がid=5,6で2回記載されているので、id=6の'dorachan'を削除してみる。

sqlite> DELETE FROM users WHERE id=6;

sqlite> SELECT * FROM users;
1|ryoko|saito|f
2|kuma|kumasann|m
3|usa|usakosan|f
4|paopom|zousan|m
5|dorachan|doradora|m

id=6が削除されたのが確認できた。

また、idを大きい順に並びなおしたい時は、

sqlite> SELECT * FROM users WHERE gender = 'f' ORDER BY name DESC;
3|usa|usakosan|f
1|ryoko|saito|f

小さい順に戻したい時は、

sqlite> SELECT * FROM users WHERE gender = 'f' ORDER BY name ASC;
1|ryoko|saito|f
3|usa|usakosan|f

大きい順から一つだけ表示したい時は、

sqlite> SELECT * FROM users WHERE gender = 'f' ORDER BY name DESC LIMIT 1;
3|usa|usakosan|f
sqlite>

とする。