1.数据更新
1.插入数据
1.插入元组
语句格式
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >...)]
VALUES (<常量1> [,<常量2>]... );
功能:将新元组插入指定表中
INTO子句 :
指定要插入数据的表名及属性列
属性列的顺序可与表定义中的顺序不一致
没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
指定部分属性列:插入的元组在其余属性列上取空值
VALUES子句 :
提供的值必须与INTO子句匹配: 值的个数, 值的类型
将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
INSERT
INTO Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES ('201215128','陈冬','男','IS',18);
将学生张成民的信息插入到Student表中。
INSERT
INTO Student
VALUES ('201215126','张成民','男',18,'CS');
插入一条选课记录( '200215128','1 ')。
INSERT
INTO SC(Sno,Cno)
VALUES ('201215128 ',' 1 ');
关系数据库管理系统将在新插入记录的Grade列上自动地
赋空值。
或者:
INSERT
INTO SC
VALUES (' 201215128 ',' 1 ',NULL);
2.插入子查询结果 (可以一次插入多个元组)
语句格式:
INSERT
INTO <表名> [(<属性列1> [,<属性列2>... )]
子查询;
INTO子句
子查询 :SELECT子句目标列必须与INTO子句匹配 (值的个数 ,值的类型)
对每一个系,求学生的平均年龄,并把结果存入数据库
第一步:建表
CREATE TABLE Dept_age
( Sdept CHAR(15) /*系名*/
Avg_age SMALLINT); /*学生平均年龄*/
第二步:插入数据
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;
关系数据库管理系统在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则
实体完整性
参照完整性
用户定义的完整性: NOT NULL约束, UNIQUE约束 ,值域约束
2.修改数据
语句格式
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]...
[WHERE <条件>];
功能 :
修改指定表中满足WHERE子句条件的元组
SET子句给出<表达式>的值用于取代相应的属性列
如果省略WHERE子句,表示要修改表中的所有元组
1.修改某一个元组的值
将学生201215121的年龄改为22岁
UPDATE Student
SET Sage=22
WHERE Sno=' 201215121 ';
2.修改多个元组的值
将所有学生的年龄增加1岁。
UPDATE Student
SET Sage= Sage+1;
3.带子查询的修改语句
将计算机科学系全体学生的成绩置零。
UPDATE SC
SET Grade=0
WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept= 'CS' );
关系数据库管理系统在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则
实体完整性
主码不允许修改
用户定义的完整性 : NOT NULL约束, UNIQUE约束 , 值域约束
3.删除数据
语句格式
DELETE
FROM <表名>
[WHERE <条件>];
功能:
删除指定表中满足WHERE子句条件的元组
WHERE子句:
指定要删除的元组
缺省表示要删除表中的全部元组,表的定义仍在字典中
1.删除某一个元组的值
删除学号为201215128的学生记录。
DELETE
FROM Student
WHERE Sno= 201215128 ';
2.删除多个元组的值
删除所有的学生选课记录。
DELETE
FROM SC;
3.带子查询的删除语句
删除计算机科学系所有学生的选课记录。
DELETE
FROM SC
WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept= 'CS') ;
2.练习
/*(1)在 Departments中插入一个部门,部门编号为4,部门为销售部。*/
INSERT
INTO Departments(DepartmentID,DepartmentName)
VALUES ('4','销售部');
/*(2)自拟数据,对Employee表插入4个元祖,要求都是销售部的员工。*/
INSERT
INTO Employee
VALUES
('4001','张三','1956-3-12',0,'河南郑州','475012','3345378','zs@henu.edu.cn','4'),
('4002','王五','1978-11-2',1,'河南新乡','475013','0764311','ww@henu.edu.cn','4'),
('4003','李四','1998-6-22',0,'云南昆尼','475014','0378652','ls@henu.edu.cn','4'),
('4004','刘二','1946-10-3',1,'河北廊坊','475015','7765987','le@henu.edu.cn','4');
/*(3)将'1003'号员工的地址变为"陕西"。*/
update Employee
set Address='陕西'
where EmployeeID='1003';
/*(4)将研发部所有职员的Income涨500元。*/
update Salary
set Income=Income+500
where EmployeeID in (select EmployeeID
from Employee
where DepartmentID in(select DepartmentID
from Departments
where DepartmentName='研发部'));
/*(5)将'2002'号员工的地址变为'北京',所属部门改为2。*/
update Employee
set Address='北京' ,DepartmentID='2'
where EmployeeID='2002';
/*(6)将Salary表中前3个元组的outcome属性值统一修改为1100。*/
update top(3) Salary
set OutCome='1100';
update Salary set OutCome=REPLACE(OutCome,1500,1100)
update Salary set OutCome=REPLACE(OutCome,1000,1100)
update Salary set OutCome=REPLACE(OutCome,1200,1100);
/*(7)将'3001'号员工调入财务部。*/
update Employee
set DepartmentID='1'
where EmployeeID='3001';
/*(8)在Departments表中新增一名为DepartmentTEL的属性列,并插入正确的数据信息。(DepartmentTEL为8位的部门电话)*/
alter table Departments
add DepartmentTEL char(8)
update Departments set DepartmentTEL='34568765' where DepartmentID='1'
update Departments set DepartmentTEL='34359665' where DepartmentID='2'
update Departments set DepartmentTEL='98648765' where DepartmentID='3'
update Departments set DepartmentTEL='47836865' where DepartmentID='4';
/*(11)删除Departments表的'Note'列。*/
alter table Departments
drop column Note;
/*(12)在Salary表中新增一名为Stime的属性列,Stime的值为插入时系统的时间数据*/
alter table Salary
add Stime date not null default getdate()
/*(13)删除"王霞"的信息。*/
delete from Salary
where EmployeeID in( select EmployeeID
from Employee
where Name='王霞') ;