データベース

第4章 リレーショナルデータベース言語SQL
4.1
4.2
4.3
4.4
4.5
4.6
背景と基本概念
データ定義
アクセス権限
問合せ
データ更新
アプリケーションからのデータ操作
4.5 データの更新
1.追加
INSERT INTO 表名[(列名1[,列名2・・・])]
{VALUES(値指定[,値指定・・・])|問合せ式}
①列名を省略したときは、その表のすべての列を左から順に指定したものと
同等である。
②値指定の代わりに空値を用いることもできる。
③列名を指定したとき、指定した列だけにVALUES句で指定した値が左から順
に対応する列の値として入る。指定されていない列には空値が入る。
④VALUES句では算術式を指定できない。
⑤問合せ指定を指定すると、問い合せた導出表が表に追加される。
⑥INSERT INTOの次の表名は問合せ指定中の表名と同じであってはならない
【例1】表「社員」に社員を追加
INSERT INTO 社員
VALUE('1007','山本哲哉',400,'P')
社員ID
氏名
年収
課ID
1001
浅田克郎
800
D
1002
佐藤史郎
600
D
1003
田中吉彦
900
S
1004
中原圭吾
800
S
1005
羽田康子
700
S
1006
山田悦子
500
NULL
1007
山本哲哉
400
P
【例2】年収・所属が未定の社員を追加
INSERT INTO 社員
VALUE('1007','山本哲哉',NULL,NULL)
または
INSERT INTO 社員(社員ID,氏名)
VALUE('1007','山本哲哉'
社員ID
氏名
年収
課ID
1001
浅田克郎
800
D
1002
佐藤史郎
600
D
1003
田中吉彦
900
S
1004
中原圭吾
800
S
1005
羽田康子
700
S
1006
山田悦子
500
NULL
1007
山本哲哉
NULL
NULL
【例3】D課の社員情報を設計課作業表に追加
INSERT INTO 設計課作業表
SELECT *
FROM 社員
WHERE 課ID = 'D'
(事前に以下を定義しておくこと)
CREATE TABLE 設計課作業表(
社員ID CHAR(4) NOT NULL,
氏名 NCHAR VARYING(20),
年収 INTEGER,
課ID CHAR(1),
PRIMARY KEY (社員ID),
FOREIGN KEY (課ID) REFERENCES 組織)
設計課作業表
社員ID
氏名
年収
課ID
1001
浅田克郎
800
D
1002
佐藤史郎
600
D
2.変更
UPDATE 表名
SET 列名 = 値式[,列名=値式・・・]
[WHERE 探索条件]
①探索条件で真となった行が変更の対象となる。
②WHERE句を省略するとすべての行が対象となる。
③SET句の列の値が値式に置き換わる。
④値式の代わりに空値を指定できる。
【例4】社員の年収を5%増額
UPDATE 社員
SET 年収=年収*1.05
社員ID
氏名
年収
課ID
社員ID
氏名
年収
課ID
1001
浅田克郎
800
D
1001
浅田克郎
840
D
1002
佐藤史郎
600
D
1002
佐藤史郎
630
D
1003
田中吉彦
900
S
1003
田中吉彦
945
S
1004
中原圭吾
800
S
1004
中原圭吾
840
S
1005
羽田康子
700
S
1005
羽田康子
735
S
1006
山田悦子
500
NULL
1006
山田悦子
525
NULL
【例5】D課の社員の年収を10%増額
UPDATE 社員
SET 年収=年収*1.1
WHERE 課ID='D'
社員ID
氏名
年収
課ID
社員ID
氏名
年収
課ID
1001
浅田克郎
800
D
1001
浅田克郎
880
D
1002
佐藤史郎
600
D
1002
佐藤史郎
660
D
1003
田中吉彦
900
S
1003
田中吉彦
900
S
1004
中原圭吾
800
S
1004
中原圭吾
800
S
1005
羽田康子
700
S
1005
羽田康子
700
S
1006
山田悦子
500
NULL
1006
山田悦子
500
NULL
【例6】社員1004を未配属にする
UPDATE 社員
SET 課ID=NULL
WHERE 社員ID='1004'
社員ID
氏名
年収
課ID
社員ID
氏名
年収
課ID
1001
浅田克郎
800
D
1001
浅田克郎
800
D
1002
佐藤史郎
600
D
1002
佐藤史郎
600
D
1003
田中吉彦
900
S
1003
田中吉彦
900
S
1004
中原圭吾
800
S
1004
中原圭吾
800
NULL
1005
羽田康子
700
S
1005
羽田康子
700
S
1006
山田悦子
500
NULL
1006
山田悦子
500
NULL
3.削除
DELETE FROM 表名
[WHERE 探索条件]
①探索条件で真となった行が削除される。
②表自体はなくならないので、再び行を追加することができる。
【例7】社員1004が退職したので削除
DELETE FROM 社員
WHERE 社員ID='1004'
社員ID
氏名
年収
課ID
社員ID
氏名
年収
課ID
1001
浅田克郎
800
D
1001
浅田克郎
800
D
1002
佐藤史郎
600
D
1002
佐藤史郎
600
D
1003
田中吉彦
900
S
1003
田中吉彦
900
S
1004
中原圭吾
800
S
1005
羽田康子
700
S
1005
羽田康子
700
S
1006
山田悦子
500
NULL
1006
山田悦子
500
NULL
【例8】西プロジェクトは終了したので削除
DELETE FROM 西プロジェクト
DELETE FROM プロジェクト構成員
WHERE プロジェクトID='西'
西プロジェクト
プロジェクト構成員
構成員
プロジェクトID
構成員
プロジェクトID
構成員
1002
東
1001
東
1001
1003
東
1002
東
1002
1005
東
1003
東
1003
東
1004
東
1004
西
1002
西
1003
西
1005
構成員