背景介绍
数据库是一个持久数据的集合,是长期储存在计算机内的、有组织的、可共享的、可互相关联查询数据的集合。
一般的,数据库管理系统(DBMS)有通用的架构模型,可分为如下四个模块:
- 传输模块:负责与客户端通信,接收查询请求并转换为内部格式,返回结果给客户端。需保证数据安全、稳定、高效传输
- 查询处理器:解析用户查询,转换为可执行的内部操作,优化查询计划。主要包括查询解析器和查询优化器
- 执行引擎:基于优化后的查询计划,从存储引擎获取数据执行计算操作并返回结果
- 存储引擎:提供数据结构组织和存储方式,保证数据可靠、安全、高效的读取
数据抽象
数据模型
数据模型是一种抽象方法,对现实数据特性的抽象,可用来描述数据的一组概念和定义,表示数据处理方式。数据模型可以分为以下几种类型:
- 概念数据模型:简称概念模型,这是最高层次的数据模型,通常用于描述整个系统中的数据以及数据之间的关系。它通常与具体的技术实现细节无关,更多地关注于数据组织的业务规则。常见的概念模型是实体-关系模型(ER模型)
- 逻辑数据模型:在概念模型之上,描述数据元素、数据项之间的关系、数据属性及完整性约束。常见逻辑数据模型包括:关系模型、星型模型、雪花模型等。 逻辑数据模型包括:层次、网状、关系、面向对象、对象关系等
- 物理数据模型:描述数据实际存储方式,包括物理存储硬件、数据组织分布、访问路径等
关系模型
其中,逻辑数据模型的分类概述如下:
- 层次模型:只有一个根结点(没有父节点),若干个子节点,子节点有且只有一个父节点
- 网状模型:可以多个根节点,子节点可以有多个父节点
- 关系模型:扁平的二维表,由行/列组成,主要概念包括:
- 表(关系,relation):对应实体集合
- 行(元组,tuple):具体的实体
- 列(属性,attribute):表字段信息
关系模型的三要素:
- 关系运算集合:即关系代数,描述关系操作的集合,这些操作应用于关系(表),其运算对象和结果均为关系(表)
- 关系数据结构:即表结构(数据库模型,database schema),是结构化的关系定义,常见schema结构有:
- 三层结构:Catalog、Database、Table/View
- 两层结构:Database、Table/View
- 关系完整性约束:描述表之间的约束关系,如唯一键、外键等
关系代数
关系代数是一种抽象语言,通过对关系的运算来表达查询操作。其中运算的对象和结果均为关系,运算类型包括:
- 关系运算:可分为两类
- 一元运算:选择σ、投影π、赋值 ←、重命名 ρ
- 二元运算:并∪、差 -、交∩、笛卡尔积 X、条件连接θ、自然连接⋈、除÷
- 比较运算:大于 >、大于等于 ≥、小于 <、小于等于≤、等于=、不等于 ≠
- 逻辑运算:或 OR、与 AND、非
关系运算
- 选择σ:过滤操作,WHERE条件,行运算,从关系R中选择符合条件的元组构成新的关系
- 投影π:选择操作,SELECT指定列(属性),列运算,从关系R中选择若干属性组成新的关系
- 并∪:R∪S,在关系R或关系S或两者中的元素的集合,一个元素在并集中只出现一次,R和S是同类型的,对应的属性集(字段列表)相同、属性次序相同、属性名可不同
- 交∩:R∩S,在R和S中都存在的元素的集合,一个元素在交集中只出现一次,R和S是同类型的
- 差-:R-S,在R中而不在S中的元素的集合,R∩S=R-(R-S),R和S是同类型的
- 笛卡尔积X:RXS,是R与S的无条件连接,使任意两个关系的信息能组合在一起
- 条件连接θ:从R×S的结果集中,选取在指定的属性集上满足θ条件的元组,组成新的关系,其中θ 是一个关于属性集的逻辑表达式
- 自然连接⋈:从R×S的结果集中,选取在某些公共属性上具有相同值的元组,组成新的关系
SQL语言
SQL(Structured Query Language)是一种用于管理和操作关系数据库的标准编程语言,SQL发展:
- 1974年,由Boyce和Chamberlin提出
- 1975~1979,IBM San Jose Research Lab的关系数据库管理系统原型System R实施了这种语言
- SQL-86是第一个SQL标准,后续标准:SQL-89、SQL-92(SQL2)、SQL-99(SQL3)、SQL2003, SQL2008, SQL2011, SQL2016
其中,SQL2003特点:
- 支持新的数据类型和相应的操作,例如: MULTISET
- 支持数据仓库操作,例如MERGE , MERGE = UPDATE + INSERT
- 支持 XML
SQL2016特点:
- 行模式识别:分析时间序列数据,例如股票行情等
- 支持JSON对象
- 多态表函数:用动态SQL创建强大复杂的自定义函数
- 额外的分析功能:增加三角函数,为多维数组提供支持
SQL语言类型按照使用可以分为以下:
- DQL(数据查询语言):查询数据操作,如 SELECT、WITH等语句
- DDL(数据定义语言):关系(表)定义管理操作,如 CREATE、ALTER、DROP、TRUNCATE、RENAME等语句
- DML(数据操作语言):数据处理操作,如 INSERT、UPDATE、DELETE、MERGE INTO等语句
- DCL(数据控制语言):数据权限管理,如 GRANT(授权)、REVOKE(撤权)等语句
- TCL(事务控制语言):数据库执行事务管理操作,如COMMIT(提交)、ROLLBACK(回退)等语句
其中最常用的SQL类型是:DQL、DDL、DML类型
数据查询
数据查询是数据库的核心操作,基本结构为:SELECT(投影) ... FROM(关系) ... WHERE(选择)...
单表查询
仅涉及一个表的简单查询,从一个基本表中产生所需要的结果集,From子句中仅有一个表名
- 选择若干列:Select <目标列表达式>
- 查询指定列:指定字段
- 查询全部列:*
- 查询计算列/函数使用:含有计算表达式,如substring 列
- 改变结果集的列名:基于别名 as 使用
- 选择若干元组:Select <目标列表达式> From 表名 Where 条件表达式,包括:
- 比较:比较运算符,>、 ≥、 <、≤、=、≠ 等
- 确定范围:BETWEEN AND、NOT BETWEEN AND
- 确定集合:IN、NOT IN
- 字符匹配:LIKE、NOT LIKE
- 空值:IS NULL、IS NOT NULL
- 多重条件:逻辑运算符,AND、OR
- 结果排序:ORDER BY子句,ASC(正序)、DESC(倒序),较耗时,需要临时表空间支持
- 聚合计算:基于聚合函数完成数据统计计算,常用聚合函数:COUNT、SUM、AVG、MAX、MIN
- 结果分组:GROUP BY子句,将结果表按一列或者多列值进行分组,值相等的为一组。一般的,Group By中的项,必须出现在Select子句中
- 分组筛选:HAVING子句,对分组后的结果表,按各组的统计值进行筛选,返回符合条件的元组
多表查询
查询数据来自多表,查询涉及两个或以上的表,必须将多个表进行连接。
- 笛卡尔积X:广义连接,所有行进行组合,字段拼接,行交叉组合,一般没有使用意义
- 条件连接θ:在广义连接的结果中,施加条件,加以选择,留下符合要求的元组
- 自然连接⋈:参与连接的表,必须具有相同的属性列,在某些公共属性上具有相同值的元组
- 外连接:主要用于主表-从表之间信息短缺的处理,左外连接 左表为主表;右外连接 右表为主表
- 嵌套查询:SubQuery子查询:在查询块的Where或Having中含有另一个查询块
- IN子查询
- 比较的子查询:单值:>、<、=、>=、<=、!=等;多值:ANY/SOME/ALL的子查询
- Exists的子查询
集合查询
对多个查询的结果集实施集合操作,属性必须相容,其中,ORDER BY只能施加在整个结果集中。
总结
本文针对数据库系统的基本概念进行依次说明。首先,介绍数据库系统介绍,针对数据抽象操作;其次,介绍数据模型、关系模型、关系代数和关系运算等概念;次之,介绍SQL语言的标准和类型;最后,基于最核心的数据查询操作进行详述。
我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!