BlankTar

about | blog | works | photo

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むつかしいれす。
という訳で、ここで書いていなくても出来ることがいっぱいあります。むしろ書いてないことだらけです。
欲しい機能があればググってみてくださいまし。結構、あるかもね。

やー、しかし結構長くなってしまった。
なんともはや。
< C言語でfor i inをしたい gentooにSLiMインストールしてみた >