当前位置:   article > 正文

数据库系统概论总结复习_数据库系统概论复习

数据库系统概论复习

数据库系统概论-第五版

1. 绪论

1.1. 数据库4个基本概念

1.1.1. 数据

描述事物的符号记录,数据与其语义是不可分的。

1.1.2. 数据库

数据库是长期存储在计算机内、有组织的、可共享的长期存储大量数据的集合。
数据库中数据基本特点:永久存储、有组织和可共享三个基本特点。数据库中数据都是按照某一种数据模型来组织、描述和存储的。数据独立性高。

1.1.3. 数据库管理系统(DBMS)—软件

科学地组织和存储数据,高效的获取和维护数据。

是位于用户和操作系统之间的一层数据管理软件

主要功能:

  1. 数据定义功能
  2. 数据组织、存储和管理功能
  3. 数据操纵功能
  4. 数据库的事务管理和运行管理
  5. 数据库的建立和维护功能
  6. 其他功能(例如通信功能等)

1.1.4 数据库系统(DBS)

数据库系统是由数据库DB、数据库管理系统DBMS(及其应用开发工具)、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统

1.2. 数据管理

对数据进行分类、组织、编码、存储、检索和维护,它是数据处理的中心问题。数据处理是指对各种数据进行收集、存储、加工和传播的一系列活动的总和。

1.2.1 发展过程

人工管理阶段、文件系统阶段、数据库系统阶段

1.2.2 三个阶段对比

特点 人工管理阶段 文件系统阶段 数据库系统阶段
管理者 程序员 文件系统 数据库管理系统
数据面向对象 某一应用程序 某一应用 部门企业
数据的共享程度 无共享,冗余度极大 共享性差,冗余度答 共享性高,冗余度低
数据独立性 不独立 独立性差 具有高度的物理独立性和一定的逻辑独立性
数据结构化 无结构 记录内有结构、整体无结构 整体结构化,用数据模型描述
数据控制能力 应用程序自己控制 应用程序自己控制 DBMS提供数据安全性、完整性、并发控制和恢复能力

1.2.3 数据库系统特点

  1. 数据结构化(与文件系统的本质区别)

  2. 共享性高,冗余度低且易扩展

  3. 数据独立性高(独立性指应用程序与逻辑结构、物理存储相互独立)

    不会因为系统数据存储结构与数据逻辑结构的变化而影响应用程序

  4. 数据统一管理和控制

    数据的安全性保护,数据的完整性检查,并发控制和数据库的恢复

1.2.4 使用数据库系统好处

  1. 使用数据库系统可以大大提高应用开发的效率
  2. 当数据逻辑结构需要改变是,开发人员不必修改应用程序,或者只需要修改很少一部分
  3. 使用数据库系统可以减轻DBA维护系统的负担

1.3. 数据模型

数据模型是数据库用来对现实世界进行抽象的的工具,是数据库中用于提供信息表示和操作手段的形式框架

数据模型的数据库系统的核心和基础

1.3.1. 数据模型分类

概念模型:按照用户的观点来对数据和信息建模

表示方法,实体-联系方法,该方法用E-R 图来描述现实世界的概念模型,E-R方法也称为E-R 模型

  • 实体

    客观存在并可相互区别的事务称为实体(人、物)

  • 属性

    实体所具有的某一特性称为属性

  • 唯一标识实体的属性集称为码

  • 实体型

    用实体名及其属性集合来抽象和刻画同类实体,称为实体性

  • 实体集

    同一类型实体的集合称为实体集

  • 联系

    实体之间的联系通常是指不同实体集之间的联系

逻辑模型和物理模型:按计算机的观念对数据建模
  • 第二类中的逻辑模型:层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等
  • 第二类中的物理模型:是对数据最底层的抽象。描述了数据在系统内部的表示方式和存取方法

1.3.2. 数据模型的三大组成要素

  • 数据结构

    描述数据库的组成对象以及对象之间的联系

  • 数据操作(增删改查)

    数据操作是指对数据库中各种对象型的实例值允许执行的操作的几个,包括操作及有关的操作规则

  • 数据的完整性约束条件

    数据的完整性约束是一族完整性的规则

1.3.3. 各模型优缺点

层次模型
  • 像一颗倒立的树,结点的双亲是唯一的

  • 有且只有一个结点没有双亲结点,这个结点称为根结点

  • 根以外的其他结点有且只有一个双亲结点两个条件的记录以及它们之间联系的集合为层次模型

优点:

  1. 数据结构简单清晰
  2. 查询效率高
  3. 提供了良好的完整性支持

缺点:

  1. 现实世界中很多联系时非层次化的
  2. 程序编写复杂,如果一个节点具有多个双亲节点,只能引入冗余数据。插入删除限制多
  3. 查询子女节点必须通过双亲节点
  4. 由于结构严密,层次命令趋向于结构化
网状模型

典型的代表是DBTG 系统

特点

  • 允许多个结点没有双亲结点
  • 允许一个结点有多个双亲结点
  • 允许两个结点之间有多种联系
  • 要为每个联系命名并指出该联系有关的双亲记录和子女记录

优点:

  1. 能够更为直接的描述现实世界
  2. 具有良好的性能,存取效率较高

缺点:

  1. 结构比较复杂
  2. 语言复杂,不好掌握使用
  3. 用户需要了解系统结构的细节,因为联系是通过存取路径实现的
关系模型

特点

  • 关系模型要求关系必须是规范化(关系的每一个分量必须是一个不可分的数据项)
  • 操作对象和操作结果都是关系
  • 关系模型把存取路径向用户隐蔽起来,用户只要指出干什么或找什么,不必详细说明怎么干或怎么找(提高了数据独立性、提高了数据完整性)

优点:

  1. 建立在严格的数据概念基础上
  2. 概念单一
  3. 存取路径对用户透明,简化工作

缺点:

存取路径隐蔽,导致查询效率不高,为了提升性能,DMBS必须对用户查询请求进行优化

1.4. 数据库系统的结构

1.4.1. 数据库系统模式的概念

模式是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及型(type)的描述,不涉及具体的值。模式的一个具体值称为模式的一个实例。

1.4.2. 三级模式结构

模式、外模式、内模式

模式

模式也称逻辑模式,是数据库中全体数据逻辑结构和特征的描述,是所有用户的公共数据视图

外模式

外模式也称用户模式,它是数据库用户能够看见和使用的局部数据逻辑结构和特征的描述。是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。

一个数据库可以有多个外模式。即使对模式中的同一种数据,在外模式的结构中,类型,长度,保密级别都可以不同

内模式
  • 也称存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。

  • 索引的组织方式

    B+树,Bitmap,Hash

  • 记录的存储方式

    顺序存储,堆存储,按hash 方法存储

  • 数据是否压缩、数据是否加密

  • 数据存储记录的规定——数据的长度

在数据库系统中,通常用三级模式来描述数据库,其中外模式是用户与数据库的接口,是应用程序可见到的数据描述,概念模式是对数据整体的逻辑结构的描述,而内模式描述了数据的物理结构

1.4.3. 数据库的二级映像功能与数据独立性

  • 外模式/模式映像
    模式改变,对映象做修改,可以保证外模式不变,保证了逻辑独立性

    • 保证数据的逻辑独立性

      当模式改变时,数据库管理员对外模式/模式映像作相应改变,使外模式保持不变

      应用程序是依据数据的外模式编写的,应用程序不必修改与程序的逻辑独立性,简称数据的逻辑独立性

    • 有一个外模式/模式映像定义外模式与模式之间的对应关系,映像定义通常包含在个外模式的描述中

  • 模式/内模式映象
    内模式改变(数据库的存储结构改变),对映象做修改,可以保持模式不变,保证了物理独立性

1.5. 数据库系统的组成

  1. 数据库是由数据库、数据库管理系统(及其开发工具)、应用程序、数据库管理员组成
  2. 硬件平台及数据库、软件、人员

2. 关系数据库

按照数据模型三要素,关系模型由数据结构、关系操作集合和关系完整性约束三部分组成

acid 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability).

2.1. 关系模型数据结构及形式化定义

关系模型的数据结构非常简单,只包含单一的数据结构——关系

2.1.1. 关系

关系是关系模式某一时刻的内容或状态

关系在域上D笛卡尔积的子集
关系可以有三种类型:基本关系(基本表)、查询表、试图表。

  • 域是一组具有相同数据类型的值的集合

  • 笛卡尔积

    给定一组域 D 1 , D 2 , D 3 , D n 的笛卡尔积为 D 1 ∗ D 2 ∗ D 3 = { d 1 , d 2 , d n } 给定一组域D_1,D_2,D_3,D_n的笛卡尔积为D_1*D_2*D_3=\{d_1,d_2,d_n\} 给定一组域D1,D2,D3,Dn的笛卡尔积为D1D2D3={ d1,d2,dn}

    每一个元素 ( d 1 , d 2 , d 3 ) 叫做一个元组,每一个元素中的每一个值 d i 叫做一个分量 (d_1,d_2,d_3)叫做一个元组,每一个元素中的每一个值d_i叫做一个分量 (d1,d2,d3)叫做一个元组,每一个元素中的每一个值di叫做一个分量

    一个域允许的不同取值个数称为这个域的基数

1) 基本关系

有6 条性质

  • 列是同质的,即每一列中的分量是同一类型的数据
  • 不同列可能出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名
  • 列的顺序是无所谓的,即列的次序可以任意交换
  • 任意两个元祖的候选码不能去相同的值
  • 行的顺序也是 无所谓的
  • 分量必须取原子值,即每一个分量都必须是不可分的数据项
2) 查询表
3) 视图表

2.1.2. 关系模式

关系的描述称为关系模式 ,可形式化的表示为R(U,D,DOM,F)
其中R为关系名,U为组成该关系的属性名集合,D为U中属性所来自的域,DOM为属性向域的映象集合,F为属性间数据的依赖关系集合。

组成部分

  • 关系数据结构
  • 关系操作
  • 关系的完整性约束

2.1.3 关系数据库

关系数据库:关系数据库也有型和值之分,型是关系模式,是对关系数据库的描述。值是关系模式在某一时刻对应的关系集合。

区别

  • 关系模式:对关系的描述称为关系模式,可以形式化表示为R(U,D,DOM,F)
  • 关系:是关系模式某一时刻的状态或者内容,关系模式是静态的,而关系是动态的。

2.1.4. 关系模式与关系的区别

关系模式是型;关系是值,是关系模式的实例。
例如S(num,name,age)是关系模式,组成的表是关系,即某一时刻关系模式的值

  • 关系模式
    对关系的描述
    静态的、稳定的
  • 关系
    关系模式在某一时刻的状态或内容动态的、随时间不断变化的关系模式和关系往往统称为关系
  • 在数据库学科中可以把关系模式理解为表的结构、属性之间的关系、约束条件,把关系理解为二维表

2.2. 关系操作

2.2.1 基本操作

查询操作: 选择、投影、连接、除、并、差、交、笛卡尔积
选择、投影、并、差、笛卡尔积是五种基本操作
数据更新:插入、删除、修改

2.2.2 关系数据语言的分类

1) 关系代数

关系代数是用关系的运算来表达查询要求,代表:ISBL;

2) 关系演算

关系演算语言用谓词来表达查询要求;关系演算又可按照谓词变元的基本对象是元组变量还是域系变量分为元组关系演算和域关系演算

  • 元组关系演算语言
    谓词变元的基本对象是元组变量;
    代表:APLHA, QUEL;
  • 域关系演算语言
    谓词变元的基本对象是域变量;
    代表:QBE;
3) 结构化查询语言

具有关系代数和关系演算双重特点的语言;
代表:SQL(Structured Query Language) ;

2.3. 关系完整性约束

1) 实体完整性约束-主键约束

若属性A是基本关系R的主属性,则属性A不能取空值

2) 参照完整性约束-外键约束

外码(Foreign Key)
  • 设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码,即该码是另一个表的主码。
  • 基本关系R称为参照关系(Referencing Relation),即本表。
  • 基本关系S称为被参照关系(Referenced Relation) 或目标关系(Target Relation),即外码对应的主码所在的表。

若属性F是基本关系R的外码,它与基本关系S的主码K相对应,则对R中的每个元组在F上的值,必须为空值或者S中某个元组的主码值

若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:

  • 或者取空值(F的每个属性值均为空值)

  • 或者等于S中某个元组的主码值

  • 外码的值要么为空,要么为S中某个元组的主码值
    在这里插入图片描述

    例2

    在这里插入图片描述

    例3

    在这里插入图片描述

3) 用户定义的完整性约束

  • 性针对某一具体关系数据库的约束条件。它反映了某一具体应用所涉及的数据必须满足的语义要求。
  • 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
  • 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能

2.4. 关系代数

关系代数运算是以集合运算为基础的运算

在这里插入图片描述

2.4.1 传统的集合运算

image

举例

image

举例

笛卡尔积

R和S 具有相同的元数,且对应的属性的类型也相同

下面是RxS的结果,R和S使用上图中的R,S

即属于R又属于S的元组(行)组成

2.4.2 专门的关系运算

选择

举例

选择出满足条件的元组的操作叫做选择

选择A2值为a或b的元祖

投影

关系R上的投影是从R上选择出若干属性列出组成新的关系

连接

连接也被 θ 连接,它是从两个关系的笛卡尔积中选取属性满足一定条件的元组 连接也被\theta 连接,它是从两个关系的笛卡尔积中选取属性满足一定条件的元组 连接也被θ连接,它是从两个关系的笛卡尔积中选取属性满足一定条件的元组

连接运算中有两种最重要也是最为常用的连接,一种是等值连接,一种是自然连接

  • θ 为 " = " 的连接运算称为等值连接 \theta 为"=" 的连接运算称为等值连接 θ"="的连接运算称为等值连接

    从广义笛卡尔积中选取A,B 属性值相等的那些元组

  • 自然连接是一种特殊的等值连接

    要求两个关系中进行比较的分量必须是同名的属性,且在结果中把重复的属性列去掉

设关系R除以关系S的结果为关系T,则T包含所有在R但不在S上的属性及其值,且T的元组与S的元组的所有组合都在R中

2.5 关系演算

2.5.1 元组关系演算语言

2.5.2 元组关系演算

3. 数据库标准语言SQL

3.1. SQL概述

在这里插入图片描述

3.1.1. SQL特点

① 综合统一

  • 集数据定义语言 DDL(Data Definition Language),数据操纵语言 DML(Data Manipulation Language),数据控制语言 DCL(Data Control Language) 功能于一体。
  • 可以独立完成数据库生命周期中的全部活动:
    • 定义关系模式,插入数据,建立数据库;
    • 对数据库中的数据进行查询和更新;
    • 数据库重构和维护
    • 数据库安全性、完整性控制等
  • 用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据的运行。
  • 数据操作符统一

② 高度非过程化

  • 非关系数据模型的数据操纵语言“面向过程”,必须制定存取路径
  • SQL只要提出“做什么”,无须了解存取路径。
  • 存取路径的选择以及SQL的操作过程由系统自动完成。

③ 面向集合的操作方式

  • 非关系数据模型采用面向记录的操作方式,操作对象是一条记录
  • SQL采用集合操作方式:
    • 操作对象、查找结果可以是元组的集合
    • 一次插入、删除、更新操作的对象可以是元组的集合

④ 以同一种语法结构提供多种使用方式

  • SQL是独立的语言
    • 能够独立地用于联机交互的使用方式
  • SQL又是嵌入式语言
    • SQL能够嵌入到高级语言(例如C,C++,Java)程序中,供程序员设计程序时使用

⑤ 语言简洁,易学易用

  • SQL功能极强,完成核心功能只用了9个动词。
SQL功能 动词
数据查询 SELECT
数据定义 CREATE、DROP、ALTER
数据操纵 INSERT、UPDATE、DELETE
数据控制 GRANT、REVOKE

3.1.2. 基本概念

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

在这里插入图片描述
基本表

  • 本身独立存在的表
  • SQL中一个关系就对应一个基本表
  • 一个(或多个)基本表对应一个存储文件
  • 一个表可以带若干索引

存储文件

  • 逻辑结构组成了关系数据库的内模式
  • 物理结构是任意的,对用户透明

视图

  • 从一个或几个基本表导出的表
  • 数据库中只存放视图的定义而不存放视图对应的数据
  • 视图是一个虚表
  • 用户可以在视图上再定义视图

3.1.3 数据字典

  • 数据字典关系数据库管理系统内部的一组系统表它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等
  • 关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息。
  • 在进行查询优化和查询处理时,数据字典中的信息是其重要依据。

3.2. 数据定义

在这里插入图片描述
在这里插入图片描述

没有那种数据库支持所有的sql和特性

3.2.1 数据定义概览

SQL的数据定义功能: 模式定义表定义视图索引的定义

在这里插入图片描述

3.2.2 SCHEMA

定义模式实际上定义了一个命名空间

  • 在这个空间中可以定义模式包含的数据库对象,例如基本表视图索引等。
  • 在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。
  • CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]
  • 如果没有指定<模式名>,那么<模式名>隐含为<用户名>
① 定义模式

dbo database owner 数据库的创建者,创建该对象的用户. guest 顾客 能够访问数据库中对象的数据, 要求dbo分配权限给guest, 一般给他查看的权限select

  • 这里我先创建一个数据库用户:
    在这里插入图片描述

[例1]定义一个学生-课程模式S-T

CREATE SCHEMA "S-T" AUTHORIZATION BitHachi; -- 为用户BitHachi定义了一个模式S-T
  • 1

在这里插入图片描述

  • 如果没有指定<模式名>,那么<模式名>隐含为<用户名>
CREATE SCHEMA AUTHORIZATION BitHachi;-- <模式名>隐含为用户名BitHachi 这个不知道咋回事,没出结果,默认模式BitHachi没创建出来,没显示
  • 1

[例2]为用户BitHachi创建了一个模式S-T,并在其中定义了一个表TAB1。

CREATE SCHEMA "S-T" AUTHORIZATION BitHachi
CREATE TABLE TAB1(
COL1 SMALLINT, 
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

② 删除模式
  • DROP SCHEMA <模式名> <CASCADE|RESTRICT>
  • CASCADE(级联)
    删除模式的同时把该模式中所有的数据库对象全部删除
  • RESTRICT(限制)
    如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。
  • 当该模式中没有任何下属的对象时才能执行。
  • 以下是运行结果,至于为什么是错误的,暂且放在这里,等熟悉相关知识之后,再来解决。
DROP SCHEMA "S-T" CASCADE;
  • 1

在这里插入图片描述

DROP SCHEMA "S-T" RESTRICT;
  • 1

在这里插入图片描述

3.2.3 TABLE

① 定义基本表的标准格式
CREATE TABLE <表名>(
      <列名> <数据类型>[ <列级完整性约束条件> ]
      [<列名> <数据类型>[ <列级完整性约束条件>] ]
       ………
      [<表级完整性约束条件> ]
 );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
② 数据类型
  • SQL中的概念用数据类型来实现
  • 定义表的属性时 需要指明其数据类型及长度
  • 选用哪种数据类型
    • 取值范围
    • 要做哪些运算
  • 以下是通用数据类型,不同数据库的数据类型可能有所不同,可查相关文档。

在这里插入图片描述

③ 修改基本表
ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ DROP <完整性约束名> ]
[ ALTER COLUMN<列名> <数据类型> ];
  • 1
  • 2
  • 3
  • 4

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

  • 不论基本表中原来是否已有数据,新增加的列一律为空值。
ALTER TABLE Student ADD S_entrance DATE;
  • 1

在这里插入图片描述

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

ALTER TABLE Student ALTER COLUMN Sage INT;
  • 1

在这里插入图片描述
[例10]增加课程名称必须取唯一值的约束条件。

ALTER TABLE Course ADD UNIQUE(Cname);
  • 1

在这里插入图片描述

④ 删除基本表

标准格式:
DROP TABLE <表名>[RESTRICT| CASCADE];

  • RESTRICT
    
    • 1

    :删除表是有限制的。

    • 欲删除的基本表不能被其他表的约束所引用
    • 如果存在依赖该表的对象,则此表不能被删除
  • CASCADE
    
    • 1

    :删除该表没有限制。

    • 在删除基本表的同时,相关的依赖对象一起删除

[例11] 删除Student表

  • 基本表定义被删除,数据被删除

  • 表上建立的索引、视图、触发器等一般也将被删除

  • 还是和上述删除模式情况一样,加了CASCADE和RESTRUCT删除不了

      DROP TABLE  Student  CASCADE ;
    
    • 1

[例12]若表上建有视图,选择RESTRICT时表不能删除

    CREATE VIEW IS_Student      
	AS 
	    SELECT Sno,Sname,Sage
	    FROM  Student
    	    WHERE Sdept='IS';
	 DROP TABLE Student RESTRICT;   
456
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

--ERROR: cannot drop table Student because other objects depend on it
  • 1

在这里插入图片描述

[例12]如果选择CASCADE时可以删除表,视图也自动被删除

  • 这里还是跟之前的情况一样,删除不了,可能是我用的数据库不同叭
	DROP TABLE Student CASCADE; 	    
 --NOTICE: drop cascades to view IS_Student
	SELECT * FROM IS_Student;
--ERROR: relation " IS_Student " does not exist 
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

3.2.4 INDEX

建立索引的目的:·加快查询速度·

  • 谁可以建立索引?
    • DBA 或 表的属主(即建立表的人)
    • DBMS一般会自动建立以下列上的索引
    • PRIMARY KEY
    • UNIQUE
  • 谁维护索引?
    DBMS自动完成
  • 使用索引
    DBMS自动选择是否使用索引以及使用哪些索引
  • RDBMS中索引一般采用B+树、HASH索引来实现
    • B+树索引具有动态平衡的优点
    • HASH索引具有查找速度快的特点
  • 采用B+树,还是HASH索引 则由具体的RDBMS来决定
  • 索引是关系数据库的内部实现技术,属于内模式的范畴
  • CREATE INDEX语句定义索引时,可以定义索引是唯一索引、非唯一索引或聚簇索引
① 建立索引的标准格式

语句格式

CREATE [UNIQUE] [CLUSTER] INDEX <索引名> 
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]);
  • 1
  • 2

[例13]

CREATE CLUSTERE INDEX Stusname ON   Student(Sname);
  • 1

在这里插入图片描述

  • 在Student表的Sname(姓名)列上建立一个聚簇索引
  • 在最经常查询的列上建立聚簇索引以提高查询效率
  • `一个基本表上最多只能建立一个聚簇索引(逻辑位置与物理位置相同)
  • 经常更新的列不宜建立聚簇索引

[例14]为学生-课程数据库中的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);
  • 1
  • 2
  • 3

在这里插入图片描述

② 删除索引

DROP INDEX <索引名> ON <表名>;
DROP INDEX <表名>.<索引名>;

  • 删除索引时,系统会从数据字典中删去有关该索引的
    描述。

[例15] 删除Student表的Stusname索引

   DROP INDEX Stusno ON Student;
   //等价
   DROP INDEX Student.Stusno;
  • 1
  • 2
  • 3

在这里插入图片描述

3.3. 数据查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7DTPCznk-1648358301002)(https://gitee.com/fakerlove/picture_1/raw/master/20200329000307604.png)]

3.3.1 表数据及结构

  • 本篇文章都是围绕这三个表展开的。
    在这里插入图片描述

3.3.2 SELECT语句的一般格式

先从整体上了解一下SELECT的格式,关键字的位置。

SELECT [ALL|DISTINCT]   
<目标列表达式> [别名] [<目标列表达式> [别名]]FROM   <表名或视图名> [别名]   [<表名或视图名> [别名]][WHERE <条件表达式>]
[GROUP  BY<列名1>
[HAVING  <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC] 
4567
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.3.4 单表查询

1) 选择表中的若干列
① 查询指定列
  • 查询指定列

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

SELECT Sno,Sname 
FROM Student;
  • 1
  • 2

在这里插入图片描述

[例2] 查询全体学生的姓名、学号、所在系。

SELECT Sname,Sno,Sdept 
FROM Student;
12
  • 1
  • 2
  • 3

在这里插入图片描述

② 查询全部列
  • 选出所有属性列:在SELECT关键字后面列出所有列名 ,将<目标列表达式>指定为 *

[例3] 查询全体学生的详细记录。

SELECT  Sno,Sname,Ssex,Sage,Sdept 
FROM Student;
//两种方式
SELECT  *FROM Student;
4
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

③ 查询经过计算的值
  • SELECT子句的<目标列表达式>可以为:
    算术表达式
    字符串常量
    函数
    列别名
❶ 算术表达式

[例4] 查全体学生的姓名及其出生年份。这里假定目前年份是2004年。

SELECT Sname,2004-Sage 
FROM Student;
  • 1
  • 2

在这里插入图片描述

❷ 字符串常量及函数

[例5] 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名,这里假定目前年份是2004年。

 SELECT Sname,'Year of Birth: ', 2004-Sage, LOWER(Sdept)
 FROM Student;
  • 1
  • 2

在这里插入图片描述

❸ 使用列别名改变查询结果的列标题
SELECT Sname NAME,'Year of Birth: '  BIRTH,
2000-Sage  BIRTHDAY,
LOWER(Sdept)  DEPARTMENT
FROM Student;
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

2) 选择表中的若干元组(行)
① 关键词DISTINCT去掉表中重复的行
  • 如果没有指定DISTINCT关键词,则缺省为ALL
SELECT Sno FROM SC;
/*等价于:*/
SELECT ALL  Sno  FROM SC;
  • 1
  • 2
  • 3

在这里插入图片描述
[例6] 查询选修了课程的学生学号。指定DISTINCT关键词,去掉表中重复的行

SELECT DISTINCT Sno
FROM SC;
  • 1
  • 2

在这里插入图片描述

② 查询满足条件的元组(行)
  • 常用的查询条件
查询条件 谓词
比较 =,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符
确定范围 BETWEEN AND,NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULL
多重条件(逻辑运算) AND,OR,NOT
❶ 比较大小

[例7]查询计算机科学系全体学生的名单。

SELECT Sname
FROM Student
WHERE Sdept='CS';
  • 1
  • 2
  • 3

在这里插入图片描述
[例8] 查询所有年龄在20岁以下的学生姓名及其年龄。

SELECT Sname,Sage 
FROM Student 
WHERE Sage < 20;
  • 1
  • 2
  • 3

在这里插入图片描述
[例9]查询考试成绩有不及格的学生的学号。

SELECT DISTINCT Sno
FROM  SC
WHERE Grade<60;
  • 1
  • 2
  • 3

在这里插入图片描述

❷ 确定范围

谓词:

  • BETWEEN … AND …
  • NOT BETWEEN … AND …

[例10] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的

SELECT Sname,Sdept,Sage
FROM  Student
WHERE Sage 
BETWEEN 20 AND 23; 
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
[例11] 查询年龄不在20~23岁之间的学生姓名、系别和年龄

SELECT Sname,Sdept,Sage
FROM  Student
WHERE Sage NOT BETWEEN 20 AND 23;
  • 1
  • 2
  • 3

在这里插入图片描述

❸ 确定集合

谓词:

  • IN <值表>,
  • NOT IN <值表>

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

SELECT Sname,Ssex
FROM  Student
WHERE Sdept IN ( 'IS','MA',
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/602502
推荐阅读
相关标签
  

闽ICP备14008679号