SQL (しーける) を使用する際、 商用を含めたくさんのソフトウェアがあるが、 本学では、無償で利用でき、かつ、完全なソースコードも提供している PostgresQL (ぽすとぐれしーける) で SQL の実習を行う。
前回学んだ DDL 文を実際に PostgresQL を使って、 ひとつひとつ試してみよう。
本学では、roy のサーバ上にインストールしてある。よって roy に ssh で接続する。
irsv{c100999}% ssh roy
c100999@roy's password:
パスワードを聞かれるので、入力する。
roy{c100999}%
roy の表示が出れば成功。次に、roy のデータベースに接続する。 これから練習用に使うデータベース名は itdb である。 接続に使うコマンドは psql である。
% psql データベース名
データベースにアクセスすると、
roy{madoka}% psql itdb [~]
Welcome to psql 8.1.3, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
itdb=>
と出る。まずは英語を読み、help と quit を覚えよう。
データベースには、今まで学んだ表
が含まれている。
表を見るには、
SELECT 属性 FROM 表だった。 PostgreSQL では、コマンドの区切りは ; で表す。 character を見ようとする場合、
itdb=> SELECT * FROM character;
name | program | sex | nature
----------------+------------------+-----+--------
ブラサム | パワパフガールズ | 女 | 善
バブルス | パワパフガールズ | 女 | 善
バタカップ | パワパフガールズ | 女 | 善
モジョジョジョ | パワパフガールズ | 男 | 悪
ミス・キーン | パワパフガールズ | 女 | 善
メイヨール | パワパフガールズ | 男 | 善
プロフェッサ | パワパフガールズ | 男 | 善
ジャック | サムライジャック | 男 | 善
アク | サムライジャック | 男 | 悪
(9 rows)
とすればよい。
全ての行を取り出すには属性にワイルドカード * を用いる。
ある属性を取り出すには、 属性の中から指定すればよい。 例として、character から name を取り出してみよう。
itdb=> SELECT name FROM character;
name
----------------
ブラサム
バブルス
バタカップ
モジョジョジョ
ミス・キーン
メイヨール
プロフェッサ
ジャック
アク
(9 rows)
複数の属性を取り出すことも可能である。character から name と nature を取り出すと、
itdb=# SELECT name,nature FROM character;
name | nature
----------------+--------
ブラサム | 善
バブルス | 善
バタカップ | 善
モジョジョジョ | 悪
ミス・キーン | 善
メイヨール | 善
プロフェッサ | 善
ジャック | 善
アク | 悪
(9 rows)
となる。属性どうしは , でつないでいく。
条件は WHERE を用いた。WHERE='要素' で取り出すことが出来る。
name | program | sex | nature
--------------+------------------+-----+--------
ブラサム | パワパフガールズ | 女 | 善
バブルス | パワパフガールズ | 女 | 善
バタカップ | パワパフガールズ | 女 | 善
ミス・キーン | パワパフガールズ | 女 | 善
メイヨール | パワパフガールズ | 男 | 善
プロフェッサ | パワパフガールズ | 男 | 善
ジャック | サムライジャック | 男 | 善
(7 rows)
条件を繋ぐ場合は、
表が複数あり、そのなかの属性が重なっているとする。表の名前を A, B とする。 どちらの表にも含まれているものだけ取り出す場合は、
A 表.属性 = B 表.属性
を条件に加える。また、その属性を表示したい場合は、 どちらか片方だけの属性を取り出すと指定しなければならないため、
SELECT A 表.属性 WHERE 条件 AND A 表.属性 = B 表.属性
などとする必要がある。
GROUP BY ... HAVING の HAVING は、1 つの属性を指定するが、 同じフィールドがあるときの重複を防ぐために、GROUP BY で属性を設定する。