SQL(2) データの更新
テーブルのレストア
前回までに作成したテーブルを .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