Blanktar

  1. top
  2. blog
  3. 2013
  4. 02

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むつかしいれす。

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

やー、しかし結構長くなってしまった。 なんともはや。