SQL(2) データの更新

Image from Gyazo

テーブルのレストア

前回までに作成したテーブルを .restore でレストアしましょう. また,.tableで【学生リスト】と【学部リスト】があることを確認しましょう.

sqlite> .restore db1.sqlite
sqlite> .table
学生リスト  学部リスト
学籍番号氏名学年学部
A001岩城隼人2工学部
A002岩村優1工学部
B003杉江弘子3人文学部
C004仙波あすか1国際関係学部

【学生リスト】

学部キャンパス教員数
工学部春日井30
人文学部春日井20
国際関係学部名古屋25

【学部リスト】

スキーマの変更

作成済みのテーブルのスキーマを変更するには ALTER文 を用います. テーブル名はスキーマを変更する対象のテーブルの名前です. ADD を指定すると属性の追加, RENAME TOを指定するとテーブル名の変更ができます.

/* ALTER文 属性の追加 */
ALTER TABLE テーブル名 ADD 属性名;

/* ALTER文 テーブル名の変更 */
ALTER TABLE テーブル名 RENAME TO  属性名;

それでは,【学生リスト】に$よみがな$を追加してみましょう.

/* 【学生リスト】によみがなを追加*/
ALTER TABLE 学生リスト ADD よみがな;

属性が新しく追加されたか SELECT文で確認してしみます. 確認するとレコードの右端に「|」が表示されていることがわかります.

sqlite> select * from 学生リスト;
A001|岩城隼人|2|工学部|
A002|岩村優|1|工学部|
B003|杉江弘子|3|人文学部|
C004|仙波あすか|1|国際関係学部|

しかし,このままでは属性名が確認できないため, .headerでヘッダーを表示して,再度, SELECT文 を実行してみます. これで,$よみがな$が追加されていることが確認できました.

sqlite> .header on
sqlite> select * from 学生リスト;
学籍番号|氏名|学年|学部|よみがな
A001|岩城隼人|2|工学部|
A002|岩村優|1|工学部|
B003|杉江弘子|3|人文学部|
C004|仙波あすか|1|国際関係学部|

レコードの更新

既にテーブルに存在するレコードを更新(修正)するには UPDATE文 を用います. テーブル名は更新対象のレコードを含むテーブルの名前です. WHEREの後にある属性名2と値2が一致するレコードを検索し, SETの後にある属性名1と値1に置き換えるという操作を行います.

/* UPDATE文 */
UPDATE テーブル名 SET 属性名1=1 WHERE 属性名2=2;

それでは,【学生リスト】の$学籍番号=A001$のレコードの$よみがな$を設定してみましょう.

/* よみがなの設定 */
UPDATE 学生リスト SET よみがな="いわきはやと" WHERE 学籍番号="A001";

$よみがな$が設定されたかSELECT文で確認してみます.

sqlite> select * from 学生リスト;
学籍番号|氏名|学年|学部|よみがな
A001|岩城隼人|2|工学部|いわきはやと
A002|岩村優|1|工学部|
B003|杉江弘子|3|人文学部|
C004|仙波あすか|1|国際関係学部|

課題1

残りのレコードの$よみがな$を設定しなさい(いわむらゆう,すぎえひろこ,せんばあすか). また,SELECT文の出力結果を提出しなさい.

テーブルのコピー

テーブルをコピーするには CREATE文 を用います. 旧テーブル をコピーした新テーブル が作成されます.

/* テーブルのコピー */
CREATE TABLE 新テーブル AS SELECT * FROM 旧テーブル;

それでは,【学生リスト】をコピーして,【テニス部】を作成しましょう.

/* 【学生リスト】をコピーして【テニス部】を作成 */
CREATE TABLE テニス部 AS SELECT * FROM 学生リスト;

コピーした【テニス部】をSELECT文で確認してみます.

sqlite> .table
テニス部     学生リスト  学部リスト
sqlite> select * from テニス部;
学籍番号|氏名|学年|学部|よみがな
A001|岩城隼人|2|工学部|いわきはやと
A002|岩村優|1|工学部|いわむらゆう
B003|杉江弘子|3|人文学部|すぎえひろこ
C004|仙波あすか|1|国際関係学部|せんばあすか

レコードの削除

テーブルに存在するレコードを削除するには DELETE文 を用います. テーブル名は削除対象のレコードを含むテーブルの名前です. WHEREの後ろにある属性名と値が一致するレコードを削除します.

/* DELETE文 */
DELETE FROM テーブル名 WHERE 属性名=;

それでは,【テニス部】から$学籍番号=A001$のレコードを削除してみましょう.

/* DELETE文 */
DELETE FROM テニス部 WHERE 学籍番号="A001";

レコードを削除した【テニス部】をSELECT文で確認してみます.

sqlite> select * from テニス部;
学籍番号|氏名|学年|学部|よみがな
A002|岩村優|1|工学部|いわむらゆう
B003|杉江弘子|3|人文学部|すぎえひろこ
C004|仙波あすか|1|国際関係学部|せんばあすか
学籍番号氏名学年学部よみがな
A002岩村優1工学部いわむらゆう
B003杉江弘子3人文学部すぎえひろこ
C004仙波あすか1国際関係学部せんばあすか
【テニス部】

テーブルの削除

テーブルを削除するには DROP文 を用います.

/* DROP文 */
DROP TABLE テーブル名;

課題2

【学生リスト】をコピーして,下記の【サッカー部】を作成しなさい. また,SELECT文の出力結果を提出しなさい.

学籍番号氏名学年学部よみがな
A001岩城隼人2工学部いわきはやと
B003杉江弘子3人文学部すぎえひろこ
A005内田弘3工学部うちだひろし
【サッカー部】

テーブルのバックアップ

作成したテーブルをファイルにバックアップするには,.backupを用います. バックアップするファイル名は db2.sqlite としましょう.

sqlite> .backup db2.sqlite