请使用支持现代 CSS 与 JavaScript 的浏览器播放课件
DBPA · 3.1

SQL 概述

需要哪些列、满足哪些条件,其他交给 DBMS

VER. 2608 Built with impress.js

学习目标

判断 SQL 操作的目的,并理解用户与 DBMS 的分工

  1. 01说明 SQL 的发展基本过程
  2. 02举例解释 SQL 的五个语言特征
  3. 03判断某项请求属于数据定义、查询、数据操纵还是数据控制
  4. 04区分交互式 SQL、API/驱动调用和嵌入式 SQL
  5. 05把外模式、基本表、视图、内模式和存储文件放回三级模式
  6. 06说明标准 SQL、DBMS 实现子集、厂商扩展与 3.2—3.6 学习路线的关系
2/15
LEARNING OBJECTIVES

共同标准让 SQL 跨系统传递请求

形成共同语言基础

SEQUEL(/ˈsiːkwəl/)→ System R 实现 → 改名为 SQL → ANSI / ISO 标准

节点事件意义
1974Boyce 与 Chamberlin 提出 SEQUEL关系数据库语言的原型
System RIBM 关系数据库原型实现 SEQUEL从研究走向系统
后来名称简化为 SQL(读作 S、Q、L)形成延续至今的共同称呼
1986—1987ANSI 与 ISO 相继通过标准形成共同语言基础
3/15
SQL ORIGIN

标准 SQL、DBMS 实现与不同方言

阅读一条 SQL 命令时,先看 DBMS

SQL 标准

提供共同的语法与语义基础

DBMS 实现

通常只实现标准的一个子集,支持范围和数据类型也可能不同

厂商方言

在标准之上加入扩展、限制或不同的语法行为

遇到产品命令时,判断它是否属于标准、当前 DBMS 是否实现或属于厂商扩展;记录产品与版本,并查阅产品手册

4/15
STANDARD AND DIALECT

建表、查询、改数据和授权

授权:谁能执行哪些操作

SQL 把定义、查询、操纵与控制统一到一个能力体系

定义

建立和改变数据库对象,例如模式与基本表

查询

从关系中得到结果,例如学生姓名与成绩集合

操纵

插入、修改和删除一组元组,改变关系实例

控制

限制谁能做什么,并维护完整性与并发边界

Takeaway

不同 DBMS 支持的数据类型、命令和扩展可能不同

5/15
SQL FEATURES

SQL 让用户说明要什么

用户说明逻辑对象、属性和条件;DBMS 决定执行路径

请求方式用户需要说明系统负责什么
过程化访问方式访问路径、处理顺序和循环用户自己组织访问过程
SQL 非过程化目标关系、属性和条件RDBMS 规划路径并执行

案例:查询选某门课程的学生信息。用户指定逻辑对象、目标属性和条件,不指定扫描哪个文件、使用哪条索引或如何循环

Takeaway

执行路径的选择交给 DBMS;这可以看成是物理独立性的体现

6/15
NON PROCEDURAL

一条 SQL 请求可以处理一组元组

先看输入集合、命中集合和结果,再判断系统内部采用什么执行步骤

请求作用对象可观察结果
查询选修某课的学生SC 中满足条件的元组集合一个结果关系
把某课成绩统一加分命中的多条选课记录一次请求改变一组元组
删除已取消的选课状态为“已取消”的记录集合查询命中的集合被移除
Takeaway

DBMS 内部仍可能逐行处理或通过索引找到这些记录

7/15
SET ORIENTED

统一的 SQL 语法

SQL 可独立执行,也可通过接口或嵌入机制使用

交互式 SQL

用户在交互环境(如 MySQL Workbench 或终端)中直接输入 SQL 命令操作数据库

API / 驱动调用

Java、Python 程序通常通过驱动或 API 把 SQL 请求发送给 DBMS

嵌入式 SQL

由预编译器或特定机制把 SQL 写入高级语言程序

Takeaway

接口形式可以不同,但核心 SQL 语句结构基本一致

8/15
SQL USAGE

四类 SQL 请求

创建对象、返回结果、改变记录、改变用户权限

功能核心动词请求产生的结果
数据定义CREATE、DROP、ALTER创建或改变模式、表、视图、索引等对象
数据查询SELECT返回结果关系,不改变基本表
数据操纵INSERT、UPDATE、DELETE改变关系中的元组集合
数据控制GRANT、REVOKE改变用户对对象和操作的权限
Takeaway

重点是创建、返回或改变了什么

9/15
CORE VERBS

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

用户通过基本表和视图使用逻辑数据,DBMS 管理内部存储

SQL 连接外模式、基本表和内模式存储结构的三层映射
层次SQL 中的对应层次作用
外模式视图和部分基本表面向角色的局部逻辑结构
模式基本表数据库的全局逻辑结构
内模式存储文件、索引及物理结构DBMS 管理的存储组织
Takeaway

基本表与存储文件并非一一对应;索引由用户或 DBA 定义、由 DBMS 维护

10/15
SQL AND THREE SCHEMAS

视图是从基本表或其他视图导出的虚表

用户可以把普通视图当作关系使用,但查询结果仍来自基础对象

基本表

Student、Course、SC 是模式中的逻辑关系对象,数据由 DBMS 持久化管理

普通视图

“教师所授课程成绩”保存查询定义,使用时从基础对象生成当前结果

可观察变化

当 SC 中的成绩改变后,再查询普通视图会得到新结果,而不需要复制并同步另一张结果表

11/15
VIEW AS VIRTUAL TABLE

SQL:定义、查询、更新、空值、视图

后续每一节都把一种数据库任务写成可执行 SQL

01

3.2 数据定义

模式、表、索引与数据字典

02

3.3 数据查询

单表、连接、嵌套、集合与派生表

03

3.4 数据更新

插入、修改与删除

04

3.5 空值

判断与三值逻辑

05

3.6 视图

定义、查询、更新与作用

12/15
SQL LEARNING MAP

练习:分析一个业务请求

任务:客服要查询某次申诉涉及的玩家、道具和处理状态

判断请求

指出它属于定义、查询、操纵还是控制,并说明会生成结果还是改变数据库状态

描述集合

写出需要的逻辑对象、目标属性和筛选条件,预测结果关系的每个元组代表什么

追踪责任

指出用户负责说明什么、DBMS 负责选择什么,并标出标准/方言需要核查的位置

Takeaway

这是什么类型的操作、需要哪些表列和条件、每行结果代表什么

13/15
SECTION REVIEW

本节思维导图

14/15
KNOWLEDGE MAP

本节问题

  1. 01某产品手册给出一条只有该产品支持的建表写法。你要核对哪些标准说明、产品版本和厂商文档,才能判断它属于共同语法还是扩展?
  2. 02“查询全部不及格学生”为什么同时体现非过程化与面向集合?
  3. 03同一条查询从交互终端移入 Java 应用后,表、列和条件为何不变?
  4. 04SC 的物理文件和索引改变后,为什么面向基本表或普通视图的逻辑查询通常可以保持稳定?
  5. 05把“查询订单”改成“撤销一批订单”后,它是返回哪些行,还是修改哪些订单记录?应归入哪类 SQL 功能?
15/15
SECTION QUESTIONS