.

SQL 実習

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)

とすればよい。

演習7-1: 同様に、その他の表も眺めてみよう。

属性を取り出すには

全ての行を取り出すには属性にワイルドカード * を用いる。

ある属性を取り出すには、 属性の中から指定すればよい。 例として、character から name を取り出してみよう。

itdb=> SELECT name FROM character;
      name      
----------------
 ブラサム
 バブルス
 バタカップ
 モジョジョジョ
 ミス・キーン
 メイヨール
 プロフェッサ
 ジャック
 アク
(9 rows)

複数の属性を取り出すことも可能である。character から name と nature を取り出すと、

itdb=# SELECT name,nature FROM character;
      name      | nature 
----------------+--------
 ブラサム       | 善
 バブルス       | 善
 バタカップ     | 善
 モジョジョジョ | 悪
 ミス・キーン   | 善
 メイヨール     | 善
 プロフェッサ   | 善
 ジャック       | 善
 アク           | 悪
(9 rows)
となる。属性どうしは , でつないでいく。

演習7-2: 5-6 の演習を行なってみよう。

条件をつけて取り出すには

条件は WHERE を用いた。WHERE='要素' で取り出すことが出来る。

character 表から nature が「善」であるものを取り出すには、
itdb=> SELECT * FROM character WHERE nature='善'

     name     |     program      | sex | nature 
--------------+------------------+-----+--------
 ブラサム     | パワパフガールズ | 女  | 善
 バブルス     | パワパフガールズ | 女  | 善
 バタカップ   | パワパフガールズ | 女  | 善
 ミス・キーン | パワパフガールズ | 女  | 善
 メイヨール   | パワパフガールズ | 男  | 善
 プロフェッサ | パワパフガールズ | 男  | 善
 ジャック     | サムライジャック | 男  | 善
(7 rows)

条件を繋ぐ場合は、

日本語はおかしな表示になることもあるが、 きちんとプログラムは作動するはずである。

同じ属性を含むものを取り出したい場合

表が複数あり、そのなかの属性が重なっているとする。表の名前を A, B とする。 どちらの表にも含まれているものだけ取り出す場合は、

A 表.属性 = B 表.属性

を条件に加える。また、その属性を表示したい場合は、 どちらか片方だけの属性を取り出すと指定しなければならないため、

SELECT A 表.属性 WHERE 条件 AND A 表.属性 = B 表.属性

などとする必要がある。

GROUP BY ... HAVING の HAVING は、1 つの属性を指定するが、 同じフィールドがあるときの重複を防ぐために、GROUP BY で属性を設定する。

演習 5-7, 6-1, 6-2, 6-3, 6-4 を実行せよ。 正解は該当する回の解答である。

本日のレポート課題 : (Subject: 第 7 回レポート 「SQL 実習」)

宛先は
it-sip-0529-report@e.koeki-u.ac.jp
である。

  1. SQL を学んだ感想を述べよ。
  2. 前半の講義全体に関する感想を述べよ。