数据库总结(考研复试和期末复习皆可用)

数据库总结

点击下载该文档 密码:cqoq
本人自制了简答题的速记卡片 地址,大家可以参考使用。[下载Markji App 使用]

第一章 绪论

1.1 数据库系统概述

  1. 数据库管理系统(DBMS)的功能:

    1. 数据定义功能
    2. 数据组织、存储和管理
    3. 数据库操纵功能
    4. 数据库的事务和运行功能
    5. 数据库的建立和维护功能
    6. 其他功能
  2. 数据库管理技术经历的三个阶段

    1. 人工管理阶段
    2. 文件系统阶段
    3. 数据库系统阶段
  3. 数据独立性

    1. 物理独立性:是指用户的应用程序与数据库中数据的物理存储是相互独立的。
    2. 逻辑独立性:是指用户的应用程序与数据库的逻辑结构是相互独立的。
    3. 数据独立性是由数据库管理系统提供的二级映像功能来保证的。
      • 数据独立性是由DBMS的二级映像功能来保证的(外模式/模式映像,模式/内模式映像),这两层映像机制保证了数据库系统中数据的逻辑独立性和物理独立性。

1.2 数据模型

  1. 数据模型是数据库系统的核心基础

  2. 两类数据模型

    • 第一类

      • 概念模型:是现实到信息世界的第一层抽象,也是数据库设计人员和用户之间进行交流的语言
    • 第二类:

      1. 逻辑模型
        • 层次模型
        • 网状模型
        • 关系模型
        • ……
      2. 物理模型:是对数据最底层的抽象,它描述数据在系统内部的表示方式和存取方法,或在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。
  3. 概念模型

    • 信息世界中的基本概念

      • 实体:客观存在并可相互区别的事物称为实体。例如:学生,部门…
      • 属性:实体所具有的某一特性称为属性。例如:学生实体的学号,年龄…
      • 码:唯一标识实体的属性集称为码。例如:学号为学生实体的码
      • 实体型:具有相同属性的实体必然具有共同的特征和性质。用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。例如,学生(学号,姓名,性别,出生年月,所在院系,入学时间)
      • 实体集:同一类型实体的集合称为实体集。例如,全体学生就是一个实体集。
      • 与关系模式表对应的关系:
        • 表:实体
        • 表的属性:属性
        • 表的码:码
        • 表的结构:实体集
        • 表的所有元组:实体集
      • 实体之间的关系:一对一,一对多,多对多
      • 概念模型的一种表示方法:E-R模型.全称是:实体-联系方法(Entity-Relationship approach)
    • 数据模型的组成:

      1. 数据结构(组成对象与对象之间的联系)
      2. 数据操作(CRUD)
      3. 数据的完整性约束条件(实体完整性(主码),参照完整性(外码),用户自定义完整性)
    • 常用的数据模型

      1. 层次模型:

        • 倒立的树
      2. 网状模型:

        • 有向图,链表
      3. 关系模型:

        • 二维表
        • 关系(relation):一个关系对应一张表
        • 元组(tuple):表中的一行即为一个元组。
        • 属性(attribute):表中的一列即为一个属性,给每一个属性起一个名称即属性名。
        • 域(domain):域是一组具有相同数据类型的值的集合。属性的取值范围来自某个域。
        • 分量:元组中的一个属性值。
        • 关系模式:对关系的描述,一般表示为关系名(属性l,属性2.….属性n)
          • 例如:学生(学号,姓名,年龄,性别,系名,年级)
      • 关系模型要求关系必须是规范化的,必须达到第一范式(1NF)
        • 关系模型的优缺点:

          (1)关系模型与格式化模型不同,它是建立在严格的数学概念的基础上的。

          (2)关系模型的概念单一。无论实体还是实体之间的联系都用关系来表示。数据结构简单、清晰,用户易懂易用。

          (3)关系模型的存取路径对用户透明,具有更高的数据独立性、更好的安全保密性,简化了程序员的工作和数据库开发建立的工作。

    1. 面向对象数据模型
      • 表格具有抽象意义
    • 关系,关系模式,关系模型区别和联系
      1. 关系:一个关系对应通常说的一张表
      2. 关系模式:关系的描述
      3. 关系模型:关系模型由关系数据结构,关系操作集合,关系完整性约束三部分组成.
      4. 关系和关系模式的区别
        1. 关系模式是型,关系是值,关系模式是对关系的描述
        2. 关系是关系模式在某一个时刻的状态或者内容,关系模式是静态的,稳定的,而关系是动态的,随时间不断变化的,因为关系操作在不断地更新着数据库中的数据
        3. 类似于面向对象程序设计中”类“与”对象“的区别。”关系“是”关系模式“的一个实例,可以把”关系”理解为一张带数据的表,而“关系模式”是这张数据表的表结构。
      5. 关系模型和关系的区别
        • 关系模型包含关系,关系是关系模型的数据结构,在关系模型中,现实世界的实体以及实体间的各级联系均用单一的结构类型,即关系来表示

1.3 数据库系统的结构

  1. 数据库系统的三级模式结构
    1. 模式(逻辑模式或概念模式)

      • 逻辑模式中的这些表称为基表,与物理模式的表一一对应
    2. 外模式(用户模式)

      • 模式的子集,给最终用户看到的数据的样子,视图
    3. 内模式(存储模式)

      • 描述了数据在磁盘上是如何存储的
    4. 为了能够在系统内部实现这三个抽象层次的联系和转换,数据库管理系统在这三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像。两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。

1.4 数据库系统的组成

  1. 数据库管理员(DBA,DataBase Administrator)
    1. 决定数据库中的信息内容和结构。
    2. 决定数据库的存储结构和存取策略。
    3. 定义数据的安全性要求和完整性约束条件。
    4. 监控数据库的使用和运行。
    5. 数据库的改进和重组、重构。
  2. 数据库系统
    • 应用程序+DBMS+数据库+DBA(数据库管理员)

第二章 关系数据库

2.1 关系数据库

  1. 关系
    1. 域:一组具有相同数据类型的值的集合
    2. 笛卡尔积:一个域中的元素与另外的域中的元素分别结合构成一个元组
    3. 关系
      1. 候选码:某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码(candidate key)。
      2. 主码:若一个关系有多个候选码,则选定其中一个为主码(primary key)。
      3. 主属性和非主属性:候选码的诸属性称为主属性(prime attribute)。不包含在任何候选码中的属性称为非主属性(non-prime attribute)或非码属性(non-key attribute)。
      4. 全码:关系模式的所有属性是这个关系模式的候选码,称为全码(all-key)。
      5. 关系的三种类型:
        1. 基本关系(又称为基本表或基表):实际存在的表,是实际存储数据的表示,不可再分,必须规范化(也就是达到第一范式1NF)
        2. 查询表:查询结果对应的表
        3. 视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储数据

2.2 关系操作

  1. 关系操作

    1. 查询
    2. 插入
    3. 删除
    4. 修改
  2. 基本查询操作:

    • 选择操作σ (Select)(横挑)从一个表中把满足条件的元组选出来
      • 选择是一种单目运算,即对一个关系施加的运算,按给定条件从关系中挑选满足条件的元组组成的集合
      • 语法格式:σ<选择条件>(<关系名>)
    • 投影操作π (Project)(竖挑) 将需要的属性列出来
      • 投影操作是单目运算,从关系中挑选指定的属性组成的新关系。
      • 语法格式:π<属性表>(<关系名>)
    • 笛卡尔乘积× :两个关系的拼接
    • 集合差- 把属于关系A不属于关系B的元组找出来
    • ∪ 把两个模式相同的元组并起来
  3. 其他操作可由基本操作来定义和导出

2.3 关系的完整性

  1. 实体完整性原则(主码)
    • 若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值(null value)。所谓空值就是“不知道”或“不存在”或“无意义”的值。
  2. 参照完整性原则(外码)
    • 设F是基本关系R的一个或一组属性,但不是关系R的码,Ks,是基本关系S的主码。如果F与Ks相对应,则称F是R的外码(foreign key),并称基本关系R为参照关系(referencing relation),基本关系S为被参照关系(referenced relation)或目标关系(target relation)。关系R和S不一定是不同的关系。

2.4 关系代数

  1. 分类

    1. 传统的集合运算(从的角度进行,二目运算,两个关系之间进行)

      1. 集合的并、交、差
        • 参与集合的两个关系要满足两个条件:
          1. 属性个数相同
          2. 属性类型要一样
        • 参与并、差操作的两个关系的元组必须限制为同类型的,即具有相同的目,且对应的属性的域相同——并兼容(union compatibility);
          1. 关系操作优先级高于集合操作;
          2. 一元操作(单目)优先级高于二元操作。
      2. 笛卡尔积
        1. 结果模式包括进行操作的两个表的所有属性,两张表的每条元组之间两两拼接
        2. 若R和S中有相同的属性名,在这些属性名前加上关系名作为限定词(如:R.B,S.B),进行区别。
    2. 专门的关系运算(涉及行又涉及列)

      1. 选择操作σ (Select)(横挑)从一个表中把满足条件的元组选出来

        • 选择是一种单目运算,即对一个关系施加的运算,按给定条件从关系中挑选满足条件的元组组成的集合 。
        • 语法格式:σ<选择条件>(<关系名>)
      2. projection 投影操作π (Project)(竖挑) 将需要的属性列出来

        • 投影操作是单目运算,从关系中挑选指定的属性组成的新关系。
        • 语法格式:π<属性表>(<关系名>)
      3. 连接

        1. 语法格式R∞<连接条件>S=σ<连接条件>(R * S)

          • 解释:关系R和关系S在该条件的连接操作等于关系R和关系S先做笛卡尔乘积,再按照该条件做选择操作
        2. 等值连接:

          • 一种特殊的条件连接,连接条件只有等值的条件
          • 结果模式和笛卡尔乘积的模式类似,把等值的属性去掉一列
        3. 自然连接:两张表在所有的公共属性上做等值连接

          • 步骤:

            1. 作R x S(笛卡儿积)

            2. 在R x S上选择同名的属性组

            3. 去掉重复属性

        • 一般的连接操作是从的角度进行运算,但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
      4. 除运算

        • 计算思路:比如对于A/B来说,我们要找在关系A中跟关系B中所有y值都有联系的x值。【也就是找出在关系B中没有一个y值与A的是没有联系的。否定的否定,就是找出B中的列的属性在A中都有关联的属性,B中列的属性不写.】

        • A/B: πx(A)-all disqualified tuples(所有不合格的元组) = πx((πx(A)×B)-A)

          • 先在A中找不满足除法条件的x

            • 先把A做一个投影,投影到x属性
            • 将投影结果和关系B做一个笛卡尔乘积
            • 用笛卡尔乘积结果-A
            • 对上一步结果做一个投影,投影到x
          • 把关系A所有的x值减去所有不满足条件的x值

            • 把关系A投影到x
            • 投影结果减去上一操作找到的所有不满足条件的x值
          • 注:常见关键词:“至少” “全部”;

              求AB一般思路:πAC ÷ C ⋈ πAB
            
        • 语法格式:A/B = {<x>|ョ<x,y>∈A,∀<y>∈B}

  2. 传统的集合运算:并、差、交、笛卡儿积
    专门的关系操作:选择、投影、连接、除运算等
    基本的关系操作:选择、投影、并、差、笛卡儿积

  3. 交、连接和除,均可以用这5种基本运算来表达
    交运算:R∩S = R-(R-S)
    连接运算:R⋈S=σ<ΑΘΒ>(R × S)

    除运算:R(X,Y)÷ S(Y,Z)= πx ®- πx(πx®× πy(S)-R)

第三章 关系数据库标准语言 SQL

3.1 SQL 概述

  1. SQL:结构化查询语言(Structured Query Language)

  2. ▲SQL的特点

    1. 综合统一
    2. 高度非过程化
      • 关系代数是一种过程化的表达。
      • 关系演算是一个非过程化的表达。只需要说明得到的结果,不必标明过程,是说明性语言。
    3. 面向集合的操作方式
    4. 以同一种语法结构提供多种使用方式
    5. 语言简洁,易学易用
  3. SQL的基本概念

    • 三级模式结构对应的关系:
      • 外模式–>视图
        • 视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据。这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。视图在概念上与基本表等同,用户可以在视图上再定义视图。
      • 模式–>基本表
        • 基本表是本身独立存在的表,在关系数据库管理系统中一个关系就对应一个基本表。一个或多个基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。
      • 内模式–>存储文件
        • 存储文件的逻辑结构组成了关系数据库的内模式,存储文件的物理结构对最终用户是隐蔽的。

3.2 数据定义

  1. 模式的定义与删除

    1. 定义模式
      • CREATE SCHEMA<模式名>AUTHORIZATION<用户名>;
        • AUTHORIZATION:授权
    2. 删除模式
      • DROP SCHEMA<模式名><CASCADE|RESTRICT>;
        • CASCADE(级联),表示在删除模式的同时把该模式中所有的数据库对象全部删除;
        • RESTRICT(限制),表示如果该模式中已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。只有当该模式中没有任何下属的对象时才能执行DROP SCHEMA语句。
  2. 基本表的定义和删除与修改

    1. 定义基本表

      • [例3.7]建立学生选课表SC。
      CREATE TABLE SC
      (Sno CHAR9.
      Cno CHAR4.
      Grade SMALLINTPRIMARY KEY(Sno.Cno),/*主码由两个属性构成,必须作为表级完整性进行定义*/
      FOREIGN KEY(SnO)REFERENCES Student(Sno),/*表级完整性约束条件,Sno是外码,被参照表是Student*/
      FOREIGN KEY(CnO)REFERENCES Course(Cno)/*表级完整性约束条件,Cno是外码,被参照表是Course*/
      );
      
    2. 数据类型

      1. CHAR(n):长度为n的定长字符串
      2. VARCHAR(n):最大长度为n的变长字符串
      3. DATE:年.月.日,YYYY-MM-DD
      4. TIME:时.分.秒,HH:MM:SS
    3. 模式与表

      1. 用户创建表没有指定模式,系统根据搜索路径来确定该对象所属的模式
      2. 显示当前路径:search path
    4. 修改表

      1. add,用于增加新列,添加约束条件

        • [例3.8]向Student表增加“入学时间”列,其数据类型为日期型。

          ALTER TABLE Student ADD S_entrance DATE
      2. 修改数据类型:alter

        • [例3.9]将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。

          ALTER TABLE Student ALTER COLUMN Sage INT
    5. 删除基本表

      1. DROP TABLE<表名>[RESTRICT|CASCADE];
        • 选择RESTRICT,则该表的删除是有限制条件的。欲删除的基本表不能被其他表的约束所引用(如CHECK,FOREIGNKEY等约束),不能有视图,不能有触发器(trigger),不能有存储过程或函数等。如果存在这些依赖该表的对象,则此表不能被删除。
        • 选择CASCADE,则该表的删除没有限制条件。在删除基本表的同时,相关的依赖对象,例如视图,都将被一起删除。
        • 默认情况下是RESTRICT

3.3 索引的建立和删除

  1. 建立索引的优点

    • 建立索引是加快查询速度的有效手段。数据库索引类似于图书后面的索引,能快速定位到需要查询的内容。用户可以根据应用环境的需要在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。
  2. 建立索引

    • [例3.13]为学生-课程数据库中的Student、Course和SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。

      CREATE UNIQUE INDEX Stusno ON Student(Sno);
      
      CREATE UNIQUE INDEX Coucno ON Course(Cno);
      
      CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
      
  3. 修改索引

    • [例3.14]将SC表的SCno索引名改为SCSno。

      ALTER INDEX SCno RENAME TO SCSno;
      
  4. 删除索引

    • [例3.15]删除Student表的Stusname索引。

      DROP INDEX Stusname;/*删除索引时,系统会同时从数据字典中删去有关该索引的描述。*/
      

3.4 数据查询

  1. 单表查询

    1. 选择表中的若干列,

      • [例3.16]查询全体学生的学号与姓名。

        SELECT Sno,Sname FROM Student;-- 将Student表投影到Sno,Sname上
        
    2. 选择表中的若干元组

      • 消除取消重复的行,两个本来并不完全相同的元组在投影到指定的某些列上后,可能会变成相同的行。可以用DISTINCT消除它们。

      • [例3.21]查询选修了课程的学生学号。

         SELECT DISTINCT Sno FROM SC;
        
      • 如果没有指定DISTINCT关键词,则默认为ALL,即保留结果表中取值重复的行。

        SELECT Sno FROM SC;
        等价于
        SELECT ALL Sno FROM SC;
        
      • [例3.22]查询计算机科学系全体学生的名单。

        SELECT Sname FROM Student WHERE Sdept='CS'
      • 语句的执行过程

        • 对表进行全表扫描,扫描每个元组,检查该元组在Sdept列的值是否等于’CS’,如果相等,则取出Sname,组成一个新元素输出,否则跳过该元素重复该过程
          • 如果人多,可以在Sdept列上建立索引,系统会利用该索引找出Sdept='CS’元组,从中取出Sname形成结果关系.
      • 确定范围

        • BETWEEN AND

          • [例3.26]查询年龄不在20~23岁之间的学生姓名、系别和年龄。

            SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23
      • 确定集合:谓词IN可以用来查找指定集合的元组

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

          SELECT Sname,Ssex FROM Student WHERE  Sdept IN'CS,;MA,IS');
          
      • 字符匹配:LIKE

        • [NOT]LIKE<匹配串>[ESCAPE’<换码字符>]

        • % 表示任意长度的字符串

        • _表示任意单个字符串

        • 如果用户要查询的字符串本身就含有通配符%或_,这时就要使用ESCAPE<换码字符>短语对通配符进行转义了。(在正则表达式中,使用 ?:表示出现0次或1次 *:表示出现0次或多次 +:出现1次或多次)

        • [例3.35]查询以“DB_”开头,且倒数第三个字符为i的课程的详细情况。

          SELECT* FROM Course WHERE Cname LIKE DB\_%i_'ESCAPE'\;
          
          /*这里的匹配串为"DB\_%i__"第一个_前面有换码字符\,所以它被转义为普通的字符。而i后面的两个的前面均没有换码字符\,所以它们仍作为通配符。加/表示_不具有实际意义*/
          
      • 涉空值的查询

        • [例3.37]查所有有成绩的学生学号和课程号。

          SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL/*IS不能使用=代替*/
          
      • 多从条件的查询

        • AND的优先级高于OR,可以使用括号改变优先级

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

          SELECT Sname,Ssex FROM Student WHERE Sdept IN("CS,MA',IS);
          
          =   /*IN谓词实际上是多个OR运算的缩写*/
          
          SELECT Sname,Ssex FROM Student WHERE Sdept='CS'OR Sdept='MA'OR Sdept='IS';
          
    3. ORDER BY 子句

      • 用户可以用ORDERBY子句对查询结果按照一个或多个属性列的**升序(ASC)降序(DESC)**排列,默认值为升序

      • 注: ASC = ascend, DESC = descend; 词根:-de 表示向下

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

        SELECT Sno,Grade FROM SC WHERE Cno='3' ORDER BY Grade DESC
    4. 聚集函数

      • COUNT(*)统计元组个数
        COUNT([DISTINCT|ALL]<列名>)统计一列中值的个数
        SUM([DISTINCT|ALL]<列名>)计算一列值的总和(此列必须是数值型)
        AVG([DISTINCT|ALL]<列名>)计算一列值的平均值(此列必须是数值型)
        MAX([DISTINCT|ALL]<列名>)求一列值中的最大值
        MIN([DISTINCT|ALL]<列名>)求一列值中的最小值
        
      • 指定了DISTINCT,需要去除重复值,不指定默认为ALL,不需要去除掉

      • [例3.45]查询学生201215012选修课程的总学分数。

        SELECT SUM(Ccredit)
        FROM SC,Course WHERE Sno'201215012'AND SC.Cno-Course.Cno;
        -- 当聚集函数遇到空值时,除COUNT(*)外,都跳过空值而只处理非空值。COUNT(*)是对元组进行计数,某个元组的一个或部分列取空值不影响COUNT的统计结果。
        
      • 注意:WHERE子句中是不能用聚集函数作为条件表达式的。聚集函数只能用于SELECT子句和GROUP BY中的HAVING子句。

    5. GROUP BY 子句

      • GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组。如果未对查询结果分组,聚集函数将作用于整个查询结果。分组后聚集函数将作用于每一个组,即每一组都有一个函数值。

      • [例3.46]求各个课程号及相应的选课人数。

        SELECT Cno,COUNT(Sno)
        FROM SC GROUP BY Cno;
        
        -- 该语句对查询结果按Cno的值分组,所有具有相同Cno值的元组为一组,然后对每一组作用聚集函数COUNT进行计算,以求得该组的学生人数。
        
      • 如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用HAVING短语指定筛选条件。

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

      • [例3.48]查询平均成绩大于等于90分的学生学号和平均成绩。

        -- 下面的语句是不对的:
        SELECT Sno,AVG(Grade)
        FROM SC 
        WHERE AVG(Grade)>=90
        GROUP BY
  • 15
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值