第三章:第14堂课

内容提要:

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:
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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容