易错点

  • 视图是虚表,观察到的数据反映的是实际基本表中的数据
  • 索引最主要的副作用是维护的代价(更新索引),而不是增加存储空间的消耗
  • GROUP BY 会去重
  • 只有GROUP BY中的属性列(或者聚合函数)才能出现在SELECT中
  • 查询得到的结果不再是关系,因为有可能有重复
  • 嵌套查询不能有ORDER BY

关系

  • 试述关系模型的三个组成部分。
    • 关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成
  • 为什么外部码属性的值也可以为空?什么情况下才可以为空?
    • 实体完整性规则是指若属性 A 是基本关系 R 的主属性,则属性 A 不能取空值。
    • 即属性 F(外码) 本身不是主属性,则可以取空值,否则不能取空值。
  • 试述等值连接与自然连接的区别和联系。
    • 连接运算符是“=”的连接运算称为等值连接。它是从关系 R 与 S 的广义笛卡尔积中选取 A,B 属性值相等的那些元组
    • 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。

SQL

  • SQL的数据定义包括模式定义,表定义,视图和索引

    • 模式(schema)实际上是一个命名空间

查询

  • 单表查询
    • 查询时,可以对列进行简单运算(大小写更改,加减),也可以指定别名(直接在列名后面写别名)
    • 选择表中的若干元祖
  • 确定范围

    • Sage between 20 and 30
      • 确定集合
    • Sdept in ('cs','ff')
    • 字符匹配

    • Like

    • %
      • 表示任意长度的字符串
    • a%b
      • 表示以a开头,b结尾的任意长度的字符串
    • _
      • 代表任意单个字符
    • 聚集函数

    • where语句中不能使用聚集函数作为表达式

    • 只能用于group by 和 having
    • having作用于组,where作用于基本表和视图

连接操作

  • 等值连接
    • 在目标中重复的属性列去掉为自然连接
  • 自身连接

    • 需要给表取别名FIRST,SECOND
  • 外连接

    • 左连接、右连接
    • 将悬浮元祖保存在结果关系中
  • 嵌套操作

子查询

  • 相关子查询
    • 子查询的查询条件依赖于父查询
    • 例如大于自己的平均成绩的元祖
  • 使用IN进行嵌套
  • 带有EXISTS谓词的子查询
    • 不返回任何数据,只产生逻辑真值,因此其目标列表表达式通常都用*代替

集合查询

参加集合操作的割裂结果的列数必须相同,对应的数据类型也必须相同

  • UNION
    • 会自动去掉重复元祖
  • INTERSECT
  • EXCEPT

派生表的查询

子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,这时子查询生成的临时派生表称为主查询的查询对象。

注意,通过FROM子句生成派生表时,一定要为派生关系指定一个别名。

数据更新

插入操作时,字符串要用单引号括起来。

若没有指明插入的属性名,则每个字段都必须存在,即使为NULL,也要显示的写出来。

插入子查询的结果

INSERT
INTO Dept_Age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;

修改数据

UPDATE student
SET Sage=22
WHERE Sno = '...'

视图

  • WITH CHECK OPTION
    • 在视图创建时使用,表示对视图进行UPDATE、INSERT、DELETE操作要保证行满足视图定义中的谓词条件
  • 组成视图的属性列名全部省略或全部指定
    • 有聚合函数时必须全部指定
  • 视图可以建立在一个或多个表上,也可以建立在视图上

视图消解

关系数据库系统执行对视图的查询步骤

  1. 检查有效性
  2. 检查查询中涉及的表、视图是否存在,如果存在,把定义的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询
    • 有时候不能直接转换,例如WHERE语句中不能使用聚集函数

视图更新

  • 并不是所有的视图都可以更新
  • 基本表的行列子集视图一般是可以更新的
  • 若视图的属性来自集合函数、表达式,则该视图肯定是不可更新的
  • 对视图的更新都要转换为基本表的更新,因为有些视图的更新不能唯一有意义的转换为基本表的更新,因此并不能更新

视图的作用

  1. 简化用户的操作
  2. 使用户能以多种角度看待同一数据
  3. 对重构数据库提供了一定程度的逻辑独立性
    • 表属性改变时,只需要改变视图,应用程序SQL语句不用修改
  4. 视图能够对机密数据提供安全保护
  5. 可以更清晰的表达查询

results matching ""

    No results matching ""