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

参考書籍

愛知県名古屋市にある椙山女学園大学 文化情報学部 向研究室の公式サイトです. 専門は情報科学であり,人工知能やデータベースなどの技術要素を指導しています. この公式サイトでは,授業で使用している教材を公開すると共に, ベールに包まれた女子大教員のミステリアスな日常を4コマ漫画でお伝えしていきます. サイトに関するご意見やご質問はFacebookまたはTwitterでお問い合わせください.