sqlite3を使ってみる
sqlite3の使い方っぽいものを書いてみるよ。
とりあえず、SQLをなんとなく使えるようになる、ってのが今回の趣旨。 詳しい使い方とかは省いてるので、細かいことはほかのサイトを参照してください。
sqliteというのはSQLの実装の一つで、いちいちサーバーを建てなくて済むのが利点。 その分巨大なデータベースには向いていないけれど、中規模くらいまでなら大丈夫らしい。
データベースを一個のファイルとして扱うので、それも利点かも。扱いが凄く容易。
ああ、それともう一つ大きな利点として、データ型を指定しなくていい、ってのもあります。楽ちん。
今回はコマンドラインで使ってみます。 各言語からの使い方とかは、ググって探してみてください。 なお、sqlite3コマンドを使っているので、例はすべて行末に;が付いてます。 他の言語のバインディングから使う時は;を取って使ってください。いや、ついてても使えるのかな? 分からんけど。
追記
pythonから手軽にデータベースを使いたい方にはこちらの記事もオススメ。 pythonのdbmモジュールを使ってみた
インストールする
公式サイトのダウンロードページから、各環境にあったものをダウンロードしてきます。 linuxならapt-getとかyumとかの方が良いかもね。
落としてきたzipを解凍してみると、実行ファイルが出てくるはずです。 なんと、こいつはインストールいらずなのだ。
そのディレクトリでコマンドラインを開いて
$ sqlite3
って入力。当然だけど$
はいらないからね。
起動できたら完了。次の章へどうぞ。
ちなみに、sqlite3を終了する時は
.exit
って入力すればおっけーです。
テーブルを作る
起動できたら、とりあえずテーブルを作ってみます。
テーブルを作るコマンドは
create table テーブル名 (カンマ区切りの列名);
です。
日本語のところは適当に置き換えてください。 環境によっては日本語も使えるみたい。あんまりオススメしませんが。
具体的には
create table test (key, value);
みたいな感じ。
以下のサンプルは基本的にこのテーブルを使います。
データを追加する
データベースなんだから、データを入れなきゃしょうが無い。入れてみましょう。
insert into テーブル名 values(カンマ区切りの値);
です。
上記の例に合わせるのなら
insert into test values("abc", 123);
みたいな感じ。
データ型をかなり柔軟になんとかしてくれるようで、数字を入れたのと同じ行に文字列を追加しても怒られません。 逆に言うと、間違えたデータを入れてもエラーが発生しないので要注意です。
データを表示する
追加したなら見てみたい。今度はデータを表示してみます。
select * from テーブル名;
でテーブル内のデータをすべて表示します。 他の言語から扱う場合は、このselect文を使ってデータを取得することになります。
このselect文ってのはむやみやたらと奥が深くて、色んなことができます。 簡単に書いておきますが、正直私もよくわかってないっす。
特定の列だけを表示する
上記の例で*
と書いていたのは、実はすべての列を表示するみたいな意味があります。
つまり、特定の列だけ表示したい場合は
select 列名 from テーブル名;
とすれば良いことになります。
select key from test;
みたいな感じね。
select value, key from test;
のようにカンマ区切りで複数書いたりもできます。
条件に沿う値を持つ行だけを表示する
select * from テーブル名 where 条件;
とすると、条件に沿うものだけを表示できます。
例えば
select * from test where value = 1;
ならvalueが1のものだけ
select * from test where 0 < value and value < 10;
ならvalueが1以上10未満のものだけ
select * from test where key = "abc" and key = "def";
ならkeyがabcかdefのものを表示します。
並べ替えてから表示する
select * from test order by value asc;
とするとvalueをキーにして昇順で並べ替えて表示します。 ちなみに、ascは省略しても問題ありません。
select * from test order by value desc;
なら降順で表示します。
x行目からn行だけ表示する
select * from test limit 3;
とすると、先頭から三行だけ表示されます。
ちなみに
select * from test limit 5, 3;
とすると5行目から3行分表示されます。
行数を数える
ある条件に当てはまる行を数えたい場合は
select count(*) from テーブル名 where 条件;
とします。
もちろんwhereを省略すれば、全ての行を数えます
ちなみに
select key, count(*) from test;
みたいな使い方もできるよ。意味があるのかは知らん。
合計とか平均とか
上記の行数を数えるのとほぼ同じで
select sum(value) from test;
とすると、valueの合計値を計算してくれます。あら便利。
勿論where文を付け足せば、条件に当てはまる列からだけ、とかも出来ます。
select avg(value) from test;
でvalueの平均値を出してくれます。
勿論where文を以下省略。
値を変更する
いやー、長かった、select文。 さて、今度は値を変更してきます。更新できなきゃしょうが無いもんね。
update テーブル名 set 列名=値をカンマ区切り where 条件;
みたいな感じ。わかりにくいか。
例えば
update test set value="abcd", key=10 where value="abc";
とすると、valueが"abc"のものを valueを"abcd"に、keyを10 に変更します。 ややっこいねー・・・。
update test set key=10 where value="abc";
なら自然か。 valueが"abc"の列のkeyを10に変更します。
お察しの通りwhereを省略できます。 省略すると全ての列を変更しちゃうので、まあ実用的かどうかわかりませんが・・・。
行を削除する
使っていれば要らないデータが出るもので、そいつを消してみます。
delete from テーブル名 where 条件;
で特定の行を削除出来ます。
これもやっぱりwhereを省略可能で、そうすると全ての行を削除出来ます。
テーブルを削除する
さて、ここまでくればそれなりの作業ができるようになっている、はず。
そしたら最後に、テーブルを削除してみます。
drop table テーブル名;
こんな感じ。
HDD上のデータベースを編集する
そうそう、HDD上ののファイルを扱えなきゃしょうが無い。 今まではメモリ上でデータベースを扱っていたので、ファイルに書き出せてないです。
ファイルを開く時は、sqlite3を起動するときに
$ sqlite3 ファイル名
とします。 新規作成でも同じコマンドっす。
え? メモリ上で作業してたデータベースを保存するにはどうするかって? いや、それがね、よく知らんのよね・・・。 誰か知ってたら教えてー
さて、ここまでくれば大体使えるようになってるんじゃないでしょうか。 データベースってのは中々楽しいものなので、是非に挑戦して頂ければと思います、ええ。 ま、個人でやろうとすると、何作れってんだって感はあるけどねー。
はじめに申し上げましたとおり、ほんの一部の機能しか紹介しておりません。 てゆか、私自身が全体像を全く掴めておりません。SQLむつかしいれす。
という訳で、ここで書いていなくても出来ることがいっぱいあります。むしろ書いてないことだらけです。 欲しい機能があればググってみてくださいまし。結構、あるかもね。
やー、しかし結構長くなってしまった。 なんともはや。