2015年6月22日
less /pub/db_a/postcode/ken_all
grep 47201 /pub/db_a/postcode/ken_all |less
ファイル ken_all と同等のデータを含むデータベースを用意しています。 データベース管理システムを通じて,そこから検索を行ってみます。
psql db_a
(データベース db_a に接続)
select * from postcode where pub_auth_code = '47201';
もし,検索結果が一画面に収まらないために, more や less コマンドのようなページャを通じて表示されたなら, q を押して検索結果の表示を終了する。
\q
(psql の終了)
データベースシステムには幾つかの種類がありますが,この授業では, 現在最も標準的に用いられている 関係データベース (relational database) システムを扱います。
関係データベースシステムにおけるデータベースはテーブル (表; table) の集まりです。テーブルを関係(relation)と呼ぶことがあります 1。
テーブルは行 (row)と列 (column)で構成され,列には必ず名前 があります。行をタプル (tupple),列を属性 (attribute),列の名前を属性名 と呼ぶことがあります2 。
SQL (structured query language) は関係データベースを扱うためのデータベース言語です。 SQL では,C などの手続き型言語とは違い, 原則として目的を達成するための手順 (how) ではなく, 何をしたいか (what) を記述します。
この授業で主に扱う SQL は, ANSI (米国規格協会) と ISO (国際標準化機構) が 1992 年に制定した SQL2 規格 (通称 SQL-92) です。
SQL2 は 日本語の利用が可能になるよう, 1995 年に JIS (日本工業規格) 規格化もされています。 SQL 規格の改訂はその後も続けられています。
select * from postcode where new_post_code = '0400044';は,テーブル postcode から, 列 (属性) new_post_code の値が 0400044 である行を表示するものです。 この文における select や from,where は,SQL において特別の意味を持つ語であり, これらを SQL のキーワードと呼びます。
SQL 文の記述では, キーワードやテーブル名および属性名に大文字/小文字の区別はありませんので, どちらで書いても構いません。 ただし,書籍等では文を見やすくするために,キーワードを大文字で表記し, テーブル名や属性名を小文字にするのが一般的です。 この資料でも,これ以降は原則として,キーワードを大文字で記しますが,psql で実行する際には小文字でタイプして構いません。
一方,04000044 はデータベースからの検索の際に,
検索条件として使う値 (文字) です。
値の大文字/小文字は区別されます。
また,これから当面は,値を SQL 文に記述する場合には,それを
'
(単一引用符;シングルクォート)で囲みます。
ただし,値を単一引用符で囲むか否かは列の「データ型」に依存します。
データ型については後の回で説明します。
なお,値として '
自身を表現したければ,''
とします。
語と語との区切りには連続する空白文字や改行を使うことができます。 したがって,上記の SQL 文は
SELECT * FROM postcode WHERE new_post_code = '0400044';と書くこともできますし,逆に複数行の SQL 文を一行で書いても構いません。
この授業では,データベースシステムとして PostgreSQL というソフトウェアを利用します。 psql は PostgreSQL に付属する, データベース操作のための対話型コマンドです3。 この授業では psql コマンドを使って SQL 文を実行します。
psql の基本的な起動の仕方は
psql データベース名です。
psql コマンドの引数には,オプションや接続するデータベース名を指定しますが,
実際に何を指定するかについては,授業での指示に従ってください。
なお,psql コマンドの一般的な実行の書式は psql --help
でわかります。
psql (8.4.20) "help" でヘルプを表示します. db_a=>
最後の db_a=>
は psql におけるプロンプトです。これに続き
SQL 文などをタイプし,<Enter> キーを押して実行します。
プロンプトにおける db_a は接続中のデータベース名を表しています。
ここで,プロンプトに続き help
をタイプして <Enter> を押すと,次の通りに表示されます。
これは psql : PostgreSQL へのコマンドライン・インターフェースです。 \copyright とタイプすると、配布条件を表示します。 \h とタイプすると、SQL コマンドのヘルプを表示します。 \? とタイプすると、psql コマンドのヘルプを表示します。 \g と打つかセミコロンで閉じると、クエリーを実行します。 \q で終了します。
\q
です。
\h
でヘルプを表示します。
\
で始まるコマンド)
のヘルプは \?
です。
\
以外で始まる命令) はセミコロン (;) で終わります。
セミコロンを打たずに <Enter> を押すと,
SQL は実行されずに
db_a->
のようなプロンプトが現れます
(=>
ではなく ->
である点に注意) 。
SQL 文では,改行は無視されますので,続いてセミコロンを打ってから
<Enter> を押せば,元の SQL を実行できます。
SQL を実行せずに,元のプロンプト
(=>
)
に戻すには,CTRL-c を打ちます。
SELECT * FROM postcode WHERE pub_auth_code = '01202';
SELECT * FROM postcode WHERE pub_auth_code = '13101';
select * from postcode
where pub_auth_code = '13101'
;
SELECT * FROM postcode WHERE new_post_code = '0400044';
SELECT * FROM postcode WHERE new_post_code = '0400000';