背景介绍 数据库是一个持久数据的集合,是长期储存在计算机内的、有组织的、可共享的、可互相关联查询数据的集合。
一般的,数据库管理系统(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腾讯技术创作特训营最新征文,快来和我瓜分大奖!