アーカイブ

2009年05月

カテゴリ:

 データを更新するには update を使います。下記の例では update でテーブル lpi を指定し、set で price の値を800に更新しています。where を使わないと、すべての price が800になってしまうので注意。select で結果を確認しました。

sqlite> update lpi set price=800 where name = 'apple';
sqlite> select name,price from lpi where name = 'apple';
apple|800
apple|800

join はちょっと分かりづらいです。このコマンドを使うと異なるテーブルのデータを連結させることが出来ますが、分かりやすくするために2つのテーブル、first と second を追加します。両方のテーブルに共通する column id を作っています。

sqlite> create table first(id int, name varchar(10));
sqlite> insert into first values(1,'apple');
sqlite> insert into first values(2,'bnana');
sqlite> insert into first values(3,'lemon');

sqlite> create table second(id int, price int);
sqlite> insert into second values(1,150);
sqlite> insert into second values(1,130);
sqlite> insert into second values(2,90);
sqlite> insert into second values(2,95);
sqlite> insert into second values(3,230);

sqlite> select * from first;
1|apple
2|bnana
3|lemon

sqlite> select * from second;
1|150
1|130
2|90
2|95
3|230

ここで join を使ってみます。select でテーブル first を指定し left を指定しています。この left により左側(最初に指定した first)が優先されて表示されます。join に続き2つ目のテーブル second を指定しています。最後に on に続いてデータを共通化させる id を指定しています。

sqlite> select * from first left join second on first.id = second.id;
1|apple|1|150
1|apple|1|130
2|bnana|2|90
2|bnana|2|95
3|lemon|3|230

見づらいので少し修正してみました。

sqlite> select name,price from first
   ...> left join second
   ...> on first.id = second.id;
apple|150
apple|130
bnana|90
bnana|95
lemon|230

最後に削除です。データを行単位で削除するには delete コマンドを使います。where で指定をしないと、すべての行が削除されてしまうので注意が必要。

sqlite> delete from lpi where number = 1;

テーブルを削除するには drop コマンドを使います。下記の例ではテーブル lpi を削除しました。SQLite であれば .schema コマンドで結果を確認することが可能です。

sqlite> drop table lpi;

このあたりがさらさら出来れば、LPI 102 の試験は問題ないでしょう…。

カテゴリ:

前回で SQLite を起動しましたが、まだ何のデータもありませんので作っていきます。

lpi
namepricenumber
apple 200 3
orange 300 5
banana 200 2
apple 200 4
orange 300 2
lemon 250 3
banana 200 4

こんな感じのデータにしてみましょう。ちなみに表全体を table、各列を column、各行を record と言います。テーブルを作成するには create コマンドを使いますが、102の試験ではテーブルの作成は出ないようです。ここでは table を lpi とし name にはテキスト、price と number は数字を利用するという形で指定しています。

sqlite> create table lpi(name varchar(10), price smallint, number smallint);

ちなみに最後に";"(セミコロン)が付いていますが、これはコマンドの終了を表しています。言い換えると、このセミコロンがないとコマンドは終了せず続きのコマンドを待ちつづけます。

sqlite> create table lpi(name varchar(10), price smallint, number smallint)
   ...> ;

プロンプトが ...> となっているのが、引き続きコマンドを待っている状態を表しています。単純に最後にセミコロンを入れ忘れたときは、上記の様にセミコロンのみを入力すれば大丈夫。

次にこのテーブルに実際のデータを追加します。insert というコマンドを使いますが、これ以降はテストの対象コマンドです。

sqlite> insert into lpi values('apple',200,3);

insert コマンドの後、into に続きテーブル名(ここでは lpi)を指定します。その後 values に続き () の中にそれぞれのデータを "," で区切って代入します。apple の様な文字列は ' ' で括る必要があります。

sqlite> insert into lpi values('orange',300,5);
sqlite> insert into lpi values('lemon',250,1);
sqlite> insert into lpi values('banana',200,2);
sqlite> insert into lpi values('apple',200,4);
sqlite> insert into lpi values('orange',300,2);
sqlite> insert into lpi values('lemon',250,3);
sqlite> insert into lpi values('banana',200,4);

このようにしていけばデータが必要な分だけ入力できます。では次に入力したデータを確認してみましょう、select というコマンドを使いますが非常に重要です。

sqlite> select * from lpi;
apple|200|3
orange|300|5
lemon|250|1
banana|200|2
apple|200|4
orange|300|2
lemon|250|3
banana|200|4

上記コマンドでデータの一覧が表示されました。select コマンドの後の "*" は表示する column の指定で、"*" とするとすべて(name, price, number)を意味します。from の後に table を指定します。下記の様に表示する column を指定することもできます。

sqlite> select name,number from lpi;

データを表示する際に並べ替えるには order by を利用します。

sqlite> select * from lpi order by name;
apple|200|3
apple|200|4
banana|200|2
banana|200|4
lemon|250|1
lemon|250|3
orange|300|5
orange|300|2

by の後を name としたことで apple, bnana, lemon, orange の順に並んだことが分かります。もちろん price や number を指定することも出来ます。

同じ column の値をまとめるには group by を使います。Linux コマンドでの uniq のようなものです。下記の例では column の name のみを指定することにより重複しない形で name だけを表示しています。order by を続けて指定することも可能です。

sqlite> select name from lpi group by name;
apple
banana
lemon
orange

where を使うとデータの抽出が可能です。下記の例では name が apple のデータを指定しています。文字列を指定するときは 'apple' の様に括らないとエラーになるので注意。

sqlite> select * from lpi where name = 'apple';
apple|200|3
apple|200|4

下記の例では number が3より大きいものを指定していますが、併せて name と number のみを表示の対象とし、order by で並べ替えています。長くなるので3行に分けて実行しました。

sqlite> select name,number from lpi
   ...> where number > 3
   ...> order by name;
apple|4
banana|4
orange|5

その3へ続く

カテゴリ:

LPIC レベル1 の内容がこの4月より新しくなりました。詳細はここです。

出題範囲

目立つ点としては、102試験で SQL データ管理が追加されたこと。SQL はデータベースを操作するための言語で、データベースプログラムとしては MySQLPostgreSQL がよく使われています。

さて出題範囲の詳細を見ると、SQL に関してはこのようになっています。

105.3 SQLデータ管理
重要度: 2

説明
    データベースを照会し、基本的なSQLコマンドを使用してデータを操作する。これには、2つのテーブルやサブセレクトの結合を伴うクエリーの実行も含まれる。
主要な知識範囲
    基本的なSQLコマンドの使用
    基本的なデータ操作を実行する
重要なファイル、用語、ユーティリティ
    insert
    update
    select
    delete
    from
    where
    group by
    order by
    join

普段データベースを触っている人や、Oracle Master を持っている人には簡単な内容でしょうが、SQL なんて知らないとか触ったことのない人にとってはちょっと敷居が高いですね。ということで試験対策としての勉強方法を考えてみました。もちろん Linux を使います。

MySQL や PostgreSQL をわざわざ用意しなくても LPIC の勉強用途であれば SQLite が便利でしょう。ちなみに Windows 版もあります。

自分の Linux にインストールされているかは下記の様にして確認します(Red Hat 系の場合)。

$ rpm -q sqlite
sqlite-3.3.6-2

入っていない場合は、yum や apt-get コマンドを使い、インストールしましょう。

インストールが終わったら起動します。sqlite3 コマンドに続き利用(作成)するファイル名を指定します、今回は lpi.db としました。

$ sqlite3 lpi.db
SQLite version 3.3.6
Enter ".help" for instructions
sqlite>

sqlite> という専用のプロンプトに変わりました。.htlp (頭に"."あり)でヘルプ、.quit (頭に"."あり)で終了します。

その2へ続く

このページのトップヘ

見出し画像
×