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;
psql -d ta05001 -c 'select wday,hr from practice order by wday,hr desc;' -A -F, > result.csv
, で区切られて出力される