视图 

一、定义视图

    

CREATE  VIEW <视图名>  [(<列名>  [,<列名>]…)] AS  <子查询>[WITH  CHECK OPTION];
      示例:
     
createviewIS_View as select  Sno,Sname,Ssex,Sage,Sdeptfrom StudentwhereSdept='信息系';
        2、建立信息系学生的视图,并要求透过该视图进行的更新操作只涉及信息系学生
createviewIS_View as select  Sno,Sname,Ssex,Sage,Sdeptfrom StudentwhereSdept='信息系'withcheckoption;
    
createviewIS_View (Sno,Sname,Grade)asselectStudent.Sno,Sname,GradefromStudent,SCwhereSdept='信息系'
            and Cno='c01'andStudent.Sno=SC.Sno    
 二、查询视图
       示例:
          1、在信息系学生的视图中找出年龄小于20岁的学生
selectSno,Sname,SagefromIS_Student where Sage<</span>20;
          
select SC.Sno,SnamefromIS_Student,SCwhere IS_Student.Sno =SC.SnoandSC.Cno='c01';

 三、更新视图

        示例:

1、将信息系学生视图IS_Student中学号95002的学生姓名改为“刘辰”
update IS_Studentset Sname='刘辰' whereSno= '95002';
              updateStudentsetSname='刘辰'whereSno='95002'ANDSdept= '信息系';
          2、向信息系学生视图IS_S中插入一个新的学生记录:95029,赵新,20岁
insertintoIS_Student values('95029','赵新',20,'信息系');
         
              deletefromIS_Student where Sno='95029';
     deletefromStudentwhereSno='95029'ANDSdept='信息系';

 四、删除视图

       语法:

          DROP  VIEW  <视图名>;

       示例:

         

dropviewIS_View;

注:组成视图的属性列名

       I、省略:

           由子查询中SELECT目标列中的诸字段组成

       II、明确指定视图的所有列名:

          (1) 某个目标列是集函数或列表达式

          (2) 目标列为  *

          (3) 多表连接时选出了几个同名列作为视图的字段

          (4) 需要在视图中为某个列启用新的更合适的名字

数据安全性

 一、授权

GRANT <权限>[,<权限>]...[ON <对象类型> <对象名>] TO <用户>[,<用户>]...[WITH GRANT OPTION];
        示例:
 
grantselecton Student to  u1;
           2、把对Student表和Course表的全部权限授予用户U2和U3
grantallprivileges on Student,Coursetou2,u3;
           3、把对表SC的查询权限授予所有用户
grantselecton SC to  public;
           4、把查询Student表和修改学生学号的权限授给用户U4
grantselect,update(Sno)onStudent to u4;
           5、把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
grantinserton SC to  u5 withgrant option;

 二、收回

语法:
       REVOKE <权限>[,<权限>]...[ON <对象类型> <对象名>] FROM <用户>[,<用户>]...;
    示例:
      
 revoke update(Sno)onStudent from u4;
       2、收回所有用户对表SC的查询权限
revokeselect)on SC frompublic;
       3、把用户U5对SC表的INSERT权限收回
revokeinserton SC from  u5;

数据库角色

一、 角色的创建

语法:
          CREATE  ROLE  <角色名>
       示例:
          1、创建一个角色 R1
createroleR1;

二、 给角色授权

语法:
          GRANT  <权限>[,<权限>]… ON <对象类型>对象名 TO <角色>[,<角色>]             …
:
        
grantselect,update,insertonStudent to R1;

三、将一个角色授予其他的角色或用户

语法:
        GRANT  <角色1>[,<角色2>]… TO  <角色3>[,<用户1>]…[WITH ADMIN OPTION]
:
       
grantR1to 王平,张明,赵玲;

四、角色权限的收回

语法:
         REVOKE <权限>[,<权限>]…ON <对象类型> <对象名> FROM <角色>[,<角色>]…
:
        
              revokeR1from 王平;

附录一:

        查 询 条 件

         谓    词

 

        

          比    较

=,>,<</span>,>=,<=,!=,<>,!>,!<</span>;NOT+上述比较运算符

 

          确定范围

 

BETWEEN AND,NOT BETWEEN AND

 

 

          确定集合

 

IN,NOT IN

 

 

          字符匹配

 

LIKE,NOT LIKE

 

          空    值

   IS NULL,IS NOT NULL

          多重条件(逻辑运算)

         AND,OR,NOT

 



附录二:

    以上文章中将以学生-课程数据库作为一个例子来讲解SQL的数据定义、数据操作、数据查询和数据控制语句的具体应用。

其数据表如下所示:

学生表:Student(Sno,Sname,Ssex,Sage,Sdept)

课程表:Course(Cno,Cname,Cpno,Ccredit)

学生选课表:SC(Sno,Cno,Grade)

 Student

   学  号

    Sno

   姓  名

   Sname 

   性  别

    Ssex  

   年  龄

    Sage  

  所 在 系  

    Sdept

 

200215121

 

200215122

 

200215123

 

200515125

李勇

 

刘晨

 

王敏

 

      张立  

 

 

 

      男      

20

 

19

 

18

 

       19

CS

 

CS

 

MA

 

IS

 

 



Course

     课程号

      Cno        

    课程名

    Cname        

      先行课

       Cpno

           学分

      Ccredit

 

      1

 

      2

 

      3

 

      4

 

      5

 

      6

 

     

      7

数据库

 

数学

 

信息系统

 

操作系统

 

数据结构

 

数据处理

 

    PASCAL语言

        5

 

 

 

        1

 

        6

 

 

        7

 

      

       

        6

                 4

 

        2

 

        4

 

              3

 

 

               4

 

        2

 

        4

 



SC

学 号

           Sno       

课程号

           Cno

 成绩

 Grade

 

 200215121

 200215121

 200215121

 200215122

            200215122    

  1

  2

  3

  2

             3

  92

  85

  88

  90

  80