データベース応用 第 3 回 (データベース管理システムと関係データベースの構造) 「不要な行を削除するには」 講義ノート目次

DELETE FROM 表 WHERE 探索条件

WHERE がないと表がすべて消える。

曜日をいっせい変更

ORDER BY を曜日、時限で使用したいので、教員氏名と、 時間と曜日で打ち出した。


ta05001=> SELECT name,hr,wday,sem FROM practice ORDER BY wday;
    name    | hr | wday | sem  
------------+----+------+------
 西村まどか |  2 | 火   | 前期
 西村まどか |  1 | 火   | 後期
 西村まどか |  2 | 火   | 後期
 西村まどか |  1 | 火   | 前期
 西村まどか |  4 | 月   | 前期
 西村まどか |  5 | 月   | 通年
 西村まどか |  6 | 月   | 通年
 西村まどか |  2 | 水   | 後期
 西村まどか |  1 | 水   | 前期
 西村まどか |  2 | 水   | 前期
 西村まどか |  1 | 水   | 後期

時間割に書くためには、曜日は 月、火、水、木、金、... と並べて出力させたいのだが、 漢字コード順であるため、月曜日が先頭に来ない。

曜日は、日曜日が 0, 月曜日が 1, ..., 土曜日が 6 という数字を通常割り当てる。

UPDATE コマンドを使用して、月曜日は 1, 火曜日は 2 ... と変更しておこう。


ta05001=> UPDATE practice SET wday ='1' where wday='月';
UPDATE 3
ta05001=>  SELECT name,hr,wday FROM practice where sem='前期' ORDER
BY wday;
    name    | hr | wday 
------------+----+------
 西村まどか |  4 | 1
 西村まどか |  1 | 2
 西村まどか |  2 | 2
 西村まどか |  1 | 3
 西村まどか |  2 | 3
(5 rows)

全部でき上がるとこのようになる。


ta05001=> SELECT name,hr,wday,sem FROM practice ORDER BY wday;
    name    | hr | wday | sem  
------------+----+------+------
 西村まどか |  6 | 1    | 通年
 西村まどか |  5 | 1    | 通年
 西村まどか |  4 | 1    | 前期
 西村まどか |  1 | 2    | 後期
 西村まどか |  2 | 2    | 後期
 西村まどか |  1 | 2    | 前期
 西村まどか |  2 | 2    | 前期
 西村まどか |  1 | 3    | 前期
 西村まどか |  2 | 3    | 前期
 西村まどか |  1 | 3    | 後期
 西村まどか |  2 | 3    | 後期

wday のあと hr でも入れ替えをしないといけない。また、 前後期でも分けられるようにする必要がある。 , でつないでおく。


ta05001=> SELECT name,hr,wday FROM practice where sem='前期' ORDER BY wday,hr;
    name    | hr | wday 
------------+----+------
 西村まどか |  4 | 1
 西村まどか |  1 | 2
 西村まどか |  2 | 2
 西村まどか |  1 | 3
 西村まどか |  2 | 3
(5 rows)

sem は通年も含まれるので、AND/OR あるいは NOT 条件を増やして、 取り出せるようにしよう。取り出し方の例として

ta05001=> SELECT name,hr,wday FROM practice where sem='前期' OR sem='通年' ORDER BY wday,hr;
切り取ったデータ と、 時間割にするプログラム と、打ち出した結果
ta05001=> SELECT name,hr,wday FROM practice where NOT sem='後期' and
name='西村まどか' ORDER BY wday,hr;