数据库系统概论(超详解!!!)第三节 关系数据库标准语言SQL(Ⅴ)

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='王霞') ;

相关推荐
float_六七3 分钟前
SQL六大核心类别全解析
数据库·sql·oracle
Code季风2 小时前
将 gRPC 服务注册到 Consul:从配置到服务发现的完整实践(上)
数据库·微服务·go·json·服务发现·consul
Boilermaker19922 小时前
【Java EE】SpringIoC
前端·数据库·spring
霸王龙的小胳膊2 小时前
泛微虚拟视图-数据虚拟化集成
数据库
灵犀学长2 小时前
解锁Spring Boot多项目共享Redis:优雅Key命名结构指南
数据库·redis
轩情吖2 小时前
Qt的信号与槽(二)
数据库·c++·qt·信号·connect·信号槽·
ZeroNews内网穿透3 小时前
服装零售企业跨区域运营难题破解方案
java·大数据·运维·服务器·数据库·tcp/ip·零售
可观测性用观测云3 小时前
达梦数据库监控观测最佳实践
数据库
时序数据说3 小时前
IoTDB:专为物联网场景设计的高性能时序数据库
大数据·数据库·物联网·开源·时序数据库·iotdb
码农小站4 小时前
ClickHouse 时间范围查询:精准筛选「本月数据」
数据库