内容提要:
3.4 SQL-DML之更新Insert/Update/Delete
3.5 SQL-视图及DDL的进一步介绍
3.4 SQL-DML之更新Insert/Update/Delete
3.4.1 Insert:
insert into 表名([列名[,列名]...]) values (值[,值]...);
example:
Insert Into Teacher (T#, Tname, D#, Salary)
Values(“005”, “阮小七”, “03”, “1250”);
- 批量数据增加: 将子查询结果中的若干条元组插入到某表中
insert into 表名[(列名[,列名]...)] 子查询;
example:
Insert Into St (S#, Sname, avgScore)
Select S#, Sname, Avg(Score) From Student, SC
Where Student.S# = SC.S#
Group by Student.S# ;
3.4.2 Update:用指定的值替代元组指定字段
Update 表名
Set 列名= 表达式| (子查询)
[ , 列名= 表达式| (子查询) ] ...
[ Where 条件表达式] ;
PS:若where表达式为空,则更新所有元组
example:调整所有教师工资上调0.05%
Update Teacher
Set Salary = Salary * 1.05 ;
example:某同学001课程分数低于001课程平均分,将其001课程分数上调
Update SC
Set Score = Score * 1.05
Where C# = ‘001’ and Score < some
( Select AVG(Score) From SC
Where C# = ‘001’ ) ;
3.4.3 Delete:
Delete From 表名[ Where 条件表达式] ;
PS:若Where为空,则删除所有元组
example:删除有四门不及格课程的所有同学
Delete From Student
Where S# in
(Select S# From SC
Where Score < 60
Group by S# HavingCount(*)>= 4 );
3.5 SQL-视图及DDL的进一步介绍
- SQL视图的概念与结构
- 视图的定义与使用
- 视图更新问题
- SQL-DDL的进一步介绍: 撤消语句的使用
3.5.1 SQL视图的概念与结构
- 视图本质上说是:假设数据库有很多表,程序员提供给某一个用户其中的某几张表的集合,就是视图,视图不存储,只动态产生并维护
- 数据库从下到上分别为:
物理存储 -> 基本表 -> 视图 -> 用户
- 再具体一点:视图根据权限向不同的用户提供表信息,屏蔽掉其他的信息
3.5.2 视图的定义与使用
create view view_name[(列名[,列名] ...)]
as子查询[with check option]
example:定义一个视图CompStud为计算机系的学生,通过该视图可以将Student表中其他系的学生屏蔽掉
Create View CompStud AS
( Select * From Student
Where D# in
( Select D# From Dept Where Dname= ‘计算机’) );
example:定义一个视图Teach为教师任课的情况,把Teacher表中的个人隐私方面的信息,如工资等屏蔽掉
Create View Teach AS
( Select T.Tname, C.Cname, Credit
From Teacher T, Course C
Where T.T# = C.T# ) ;第118页
当定义好视图后,视图可以像Table一样参与SQL的各种操作语句中使用
example:我们可定义一个视图StudStat, 描述学生的平均成绩、最高成绩,最低成绩等
Creat View StudStat (S#, Sname, AvgS, MinS, MaxS, CNT)
as ( Select S#, Sname, AVG(Score), MIN(Score), Max(Score),Count(*)
From Student S, SC
Where S.S# = SC.S#
Group by S.S#) ;
3.5.3 视图的更新
-
可以更新:
对于由单一Table子集构成的视图,即如果视图是从单个基本表使用选择、投影操作导出的,并且包含了基本表的主键,则可以更新
example:可更新SQL视图示例
create view CStud(S#, Sname, Sclass)
as( select S#, Sname, Sclass
from Student
whereD# =‘03’);
Insert into CStud
values( “98030104”, “张三丰”, “980301” );
-
不能更新:
如果视图的select目标列包含聚集函数,则不能更新
如果视图的select子句使用了unique或distinct,则不能更新
如果视图中包括了group by子句,则不能更新
如果视图中包括经算术表达式计算出来的列,则不能更新
如果视图是由单个表的列构成,但并没有包括主键,则不能更新
3.5.4 视图的撤销
Drop View Teach ;
PS:注意,SQL-delete语句只是删除表中的元组, 而撤消基本表drop table的
操作是撤消包含表格式、表中所有元组、由该表导出的视图等相关的所有内容,所以使用要特别注意
alter table tablename
[add {colname data type, ...}] 增加新列
[drop {完整性约束名}]
删除完整性约束[modify {colname data type, ...}] 修改列定义
example:Sname列的数据类型增加两个字符
Alter Table Student
Modify Sname char(10) ;
第三章知识点小结:
-
SQL语言基本知识:
数据定义语言(DDL)
数据操纵语言(DML)
数据控制语言(DCL)
-
简单的SQL-DDL/DML:
创建数据库(Create Database)
创建表(Create Table)
向表中加入元组(Insert Into)
-
SQL-DML中的查询语句Select:
基本的查询操作
多表联合查询
子查询
结果计算与聚集函数
分组查询与分组过滤
并、交、差的处理
空值处理
内连接、外连接
Select的完整语法
-
SQL-DML中的操作语句:
元组新增操作:Insert
元组更新操作:Update
元组删除操作:Delete
-
SQL视图:
SQL视图的概念与结构
视图的定义(Create View)
视图的使用
视图的更新
-
SQL-DDL中修改与撤销语句:
修改语句(Alter Table)
撤销语句(Drop Database/Table/View)