Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl

SQLiteを使用して学ぶSQLの基礎

SQLはデータベースにデータを挿入したり、データを取得するための問い合わせ言語です。SQLの基本的な書き方については標準化されているのでSQLiteでもMySQLでもOracleでもPostgreSQLでも同じ記述でデータベースに問い合わせを発行することができます。

SQLを実行するための準備作業

WindowsでSQLiteを実行するための環境を構築する方法については以下で解説しています。

WindowsへSQLiteをインストールする

この作業を終えましたら

sqlite3 test.db

とデータベース名を指定してsqlite3を起動してみましょう。データベースがない場合は自動的に作成されます。

select以外の構文

SQLで難しいのはselect文です。その他の構文は比較的簡単です。select文を実行する準備もかねてselect文以外で頻繁に使用するSQLを最初に解説します。

create table - テーブルを作成する

テーブルを作成するには「create table」文を使用します。ここでは一番簡単な「create table」文の書式ついてだけ解説します。(「create table」については「create tableでテーブルを定義する(未稿)」を参照してください。)

create table テーブル名 (
  フィールド名1,
  フィールド名2,
  ...
);
titleとauthorというふたつのフィールドを持つbooksという名前のテーブルを作成するSQLです。
create table books (
  title,
  author,
  price
);

実際に実行してみてください。SQLの最後のセミコロンは必須です。わすれやすいので忘れないようにしましょう。

SQLiteでは作成されたテーブル一覧を表示するためのコマンドが用意されています。次のコマンドを実行して「books」というテーブルが表示されることを確認してください。(先頭にドット(.)があることに注意してください。)

.table

drop table - テーブルを削除する

テーブルを削除するには「drop table」を使用します。

drop table テーブル名;

では先ほど作成した「books」というテーブルを削除してみましょう。

drop table books;

「.table」と打ってテーブルが削除されていることを確認しましょう。この後「books」テーブルを使用しますのでもう一度「create table」を使用して作成してください。

insert - レコードの追加

テーブルにレコードを挿入するにはinsert文を使用します。

insert into テーブル名 (フィールド名1, フィールド名2, ..) values (値1, 値2, 値3);

「title」が「Good life」、「author」が「Saki」、「price」が「1900」のレコードをテーブルに追加するには次のようなSQLを実行します。データが文字列の場合はシングルクォートで囲むことに注意してください。

insert into books (title, author, price) values ('Good life', 'Saki', 1900);

これで以下のようなレコードがテーブルに追加されます。

+-------------+----------+--------+
|title        |author    |price   | # これはフィールド名
+=============+==========+========+
|Good life    |Saju      |1900    | 
+-------------+----------+--------+

select文については詳しくこの後に解説しますがレコードが1行挿入されたことを確かめるためのselect文を実行してみます。

select * from books;

上記のような内容が表示されればinsertは成功しています。(出力されるフォーマットが少し異なります。見やすいフォーマットで表示させる方法についてはselect文のところで解説します)

この後のためにもう少しレコードを挿入してみましょう。

insert into books (title, author, price) values ('Simple is good', 'Mai', 2000);
insert into books (title, author, price) values ('Good morning', 'Kenta', 3000);

レコードの更新 update

テーブルにあるデータを更新するにはupdate文を使用します。一般的にはwhere区で検索条件を指定して更新対象を絞ります。select文のところで解説しますが、where区には複数の条件を指定することもできます。

update テーブル名 set フィールド名1 = 値1, フィール名2 = 値2, .. where 検索するフィールド名 = 値

「author」が「taro」であるレコードのtitleの値をRubyに変更するSQLは次のようになります。

update books set title = 'Ruby' where author = 'taro'

doを使ってupdate文を実行してみましょう。

my $update = "update books set title = 'Ruby' where author = 'taro'";
$dbh->do($update);

先ほどのレコードは更新され次のようになります。

+--------+----------+
|title   |author    | # ヘッダ(これはテーブルを作成したときにできる)
+--------+----------+
|Ruby    |taro      | # レコード(update文で更新されたレコード)
+--------+----------+

レコードの削除 delete

レコードを削除するにはdelete文を使用します。一般的にはwhere区で検索条件を指定して削除対象を絞ります。

delete from テーブル名 where 検索するフィールド名 = 値

「author」が「taro」であるレコードを削除するSQLは次のようになります。

delete from books where author = 'taro';

doを使ってdelete文を実行してみましょう。

my $delete = "delete from books where author = 'taro';";
$dbh->do($delete);

レコードが削除されます。


SQLiteで学ぶデータベースの基礎へ

  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。