数据库复习——第三章

3.1 SQL概述

  • SQL支持关系数据库三级模式结构

    数据库复习——第三章_第1张图片

  • SQL语言的功能

    SQL功能 动词
    数据查询 SELECT
    数据定义 CREATE DROP ALTER
    数据操纵 INSERT UPDATE DELETE
    数据控制 GRANT REVOKE
  • Drop / Delete

    • Drop table:删除表 CASCADE 级联 / RESTRICT 限制
    • Delete From table:删除表中的数据,而不是关于表的定义

3.3 数据定义

  • 案例

3.4 数据查询

  • 语句与关系代数表达式之间的转换

    • 实现关系代数的投影操作的是 Select 子句
    • 实现关系代数的选择操作的是 Where 子句
    • 实现关系代数的连接操作的是 From……Join……On……子句
  • Select语句格式

    • DISTINCT 的作用:消除取值重复的行(如果没有指定DISTINCT关键词,则缺省为ALL )

      • 查询选修了课程的学生学号

         SELECT Sno FROM SC;  等价于	SELECT ALL Sno FROM SC;
        

        指定DISTINCT关键词,去掉表中重复的行

        SELECT DISTINCT Sno FROM SC;
        
    • WHERE子句:

      • (NOT)LIKE

        • 查询名字中第2个字为"阳"字的学生的姓名和学号

          SELECT Sname,Sno FROM Student
          WHERE Sname LIKE '_阳%';
          //\_单个字符
          //%字符串
          
      • IN/OR:IN谓词实际上是多个OR运算符的缩写

        • 查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别

          SELECT Sname,Ssex FROM Student
          WHERE Sdept IN ('CS ','MA ','IS');
          
          SELECT Sname,Ssex FROM Student
          WHERE Sdept= 'CS' OR Sdept= 'MA' OR Sdept= 'IS ';
          
      • IS (NOT)NULL

        • 查询缺少成绩的学生的学号和相应的课程号

          SELECT Sno,Cno FROM SC
          WHERE Grade IS NULL;
          
      • (NOT)BETWEEN AND

        • 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别

          SELECT Sname,Sdept FROM Student
          WHERE Sage BETWEEN 20 AND 23;
          
    • GROUP BY子句:

      • 查询平均成绩大于等于90分的学生学号和平均成绩
        下面的语句是错误的:

        SELECT Sno,AVG(Grade) FROM SC
        WHERE AVG(Grade)>=90
        GROUP BY Sno;
        

        因为WHERE子句中是不能用聚集函数作为条件表达式
        正确的查询语句应该是:

        SELECT Sno,AVG(Grade) FROM SC
        GROUP BY Sno //按学号分组
        HAVING AVG(Grade)>=90;
        

        聚集函数

        AVG() //返回某列的平均值

        COUNT() //返回某列的行数

        MAX() //返回某列的最大值

        MIN() //返回某列的最小值

        SUM() //返回某列值之和

    • ORDER BY子句:升序:ASC;降序:DESC;(缺省值为升序)

      • 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列

        SELECT Sno,Grade FROM SC
        WHERE Cno= '3'
        ORDER BY Grade DESC;
        
  • SQL语言中Where子句与Having短语的区别

    • 作用对象不同
      • WHERE子句作用于基表或视图,从中选择满足条件的元组
      • HAVING短语作用于,从中选择满足条件的组

3.7 视图

  • 基本表与视图的联系与区别

    • 视图是从一个或几个基本表(或视图)导出的表
    • 与基本表不同,是一个虚表
      • 数据库中只存放视图的定义,不存放视图对应的数据
      • 基表中的数据发生变化,从视图中查询出的数据也随之改变
  • 定义视图:

    • 行列子集视图:若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主码,我们称这类视图为行列子集视图。

      • 建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生

        CREATE VIEW IS_Student //(Sno,Sname,Sage)
        //只有行列子集视图单表情况下才能省略
        AS 
        SELECT Sno,Sname,Sage
        FROM Student
        WHERE Sdept= 'IS'
        WITH CHECK OPTION;
        
      • WITH CHECK OPTION:对该视图进行插入、修改和删除操作时,关系数据库管理系统会自动加上Sdept=‘IS’(子查询中的条件表达式)的条件

    • 带表达式的视图:又称带虚拟列的视图(Sbirth)

      • 定义一个反映学生出生年份的视图

        CREATE VIEW BT_S(Sno,Sname,Sbirth)
        AS 
        SELECT Sno,Sname,2014-Sage
        FROM Student;
        
    • 分组视图

      • 将学生的学号及平均成绩定义为一个视图

        CREATE VIEW S_G(Sno,Gavg)
        AS 
        SELECT Sno,AVG(Grade)
        FROM SC
        GROUP BY Sno;
        
    • 多表连接视图

      • 建立信息系选修了1号课程的学生的视图(包括学号、姓名、成绩)

        CREATE VIEW IS_S1(Sno,Sname,Grade)
        AS
        SELECT Student.Sno,Sname,Grade
        FROM Student,SC
        WHERE Sdept= 'IS' AND Student.Sno=SC.Sno AND SC.Cno= '1';
        
    • 在视图上创建的视图

      • 建立信息系选修了1号课程且成绩在90分以上的学生的视图

        CREATE VIEW IS_S2
        AS
        SELECT Sno,Sname,Grade
        FROM IS_S1
        WHERE Grade>=90;
        
  • 删除视图:

    DROP VIEW <视图名> CASCADE;
    
  • 查询视图:

    • 关系数据库管理系统实现视图查询的方法:视图消解法

      • 在信息系学生的视图中找出年龄小于20岁的学生

        SELECT Sno,Sage
        FROM IS_Student
        WHERE Sage<20;
        

        视图消解转换后的查询语句为

        SELECT Sno,Sage   
        FROM Student
        WHERE Sdept= 'IS' AND age<20;
        
  • 更新视图:视图是不实际存储数据虚表,对视图的更新最终要转换为对基本表的更新

    • INSERT

      • 向信息系学生视图IS_S中插入一个新的学生记录,其中学号为”201215129”,姓名为”赵新”,年龄为20岁

        INSERT
        INTO IS_Student
        VALUES(201215129,’赵新’,20);
        
    • UPDATE

      • 将信息系学生视图IS_Student中学号”201215122”的学生姓名改为”刘辰”

        UPDATE IS_Student
        SET Sname= '刘辰'
        WHERE Sno= ' 201215122 ';
        
    • DELETE

      • 删除信息系学生视图IS_Student中学号为”201215129”的记录

        DELETE
        FROM IS_Student
        WHERE Sno= ' 201215129 ';
        
  • 视图的作用 / 优点

    • 视图能够简化用户的操作
    • 视图使用户能以多种角度看待同一数据
    • 视图对重构数据库提供了一定程度的逻辑独立性
    • 视图能够对机密数据提供安全保护
    • 适当的利用视图可以更清晰的表达查询

你可能感兴趣的:(数据库复习,数据库,sql)