SQL
一、SQL的理论基础
1.1 关系数据模型(Relational Model)
SQL建立在关系数据模型之上。关系模型由三部分组成:
(1)数据结构
- **关系(Relation)**:二维表
- **属性(Attribute)**:列
- **元组(Tuple)**:行
- **域(Domain)**:属性取值范围
(2)数据操作
关系代数运算:
| 运算 | 含义 |
|---|---|
| 选择 | 行过滤 |
| 投影 | 列选择 |
| 连接 | 表组合 |
| 并 | 集合合并 |
| 差 | 集合差 |
| 笛卡尔积 | 全组合 |
| 聚合 | 汇总计算 |
(3)完整性约束
- 实体完整性(主键)
- 参照完整性(外键)
- 用户定义约束
1.2 SQL的本质
SQL是:
关系代数的声明式表达语言
用户描述:
✔ 要什么数据✘ 不描述怎么取
执行方式由查询优化器决定。
1.3 SQL与关系代数映射
| SQL结构 | 关系代数语义 |
|---|---|
| SELECT | 投影 |
| WHERE | 选择 |
| JOIN | 连接 |
| GROUP BY | 分组 |
| HAVING | 分组过滤 |
| UNION | 并 |
| INTERSECT | 交 |
| EXCEPT | 差 |
| VIEW | 虚关系 |
二、SQL查询语义模型
2.1 查询逻辑执行顺序
SQL书写顺序 ≠ 执行顺序
逻辑执行流程:
FROMJOINWHEREGROUP BYHAVINGSELECTDISTINCTORDER BYLIMIT这是理解:
- 别名作用域
- 聚合规则
- 分组约束
- 性能行为
的基础。
2.2 查询执行机制(工程层)
数据库内部执行:
SQL解析语义分析查询重写执行计划生成代价估计算子执行结果返回关键组件:
- 查询优化器
- 索引选择
- 连接算法
- 执行算子树
2.3 常见连接算法
| 算法 | 特点 |
|---|---|
| Nested Loop | 简单,适合小表 |
| Hash Join | 等值连接,高效 |
| Merge Join | 有序数据 |
三、SQL数据结构定义(DDL)
3.1 类型系统
数值
- 整数
- 定点数
- 浮点数
字符
- 定长字符串
- 变长字符串
时间
- DATE
- TIME
- TIMESTAMP
大对象
- 二进制
- 文本
3.2 表结构
表 = 关系实例。
定义要素:
- 属性
- 类型
- 默认值
- 约束
3.3 完整性约束体系
实体完整性
主键唯一且非空。
参照完整性
外键必须引用存在值。
域约束
值范围限制。
用户约束
自定义规则。
3.4 模式与命名空间
三层结构:
目录(数据库实例) └ 模式(schema) └ 表 / 视图 / 对象四、关系查询表达(SELECT)
查询本质:
对关系进行运算得到新关系
4.1 投影(列选择)
选择需要的属性。
4.2 选择(行过滤)
条件谓词过滤元组。
4.3 连接(关系组合)
内连接
匹配行。
外连接
保留未匹配行。
自连接
同一关系多角色。
自然连接
按同名属性匹配。
4.4 分组与聚合
聚合函数:
- 计数
- 求和
- 平均
- 最大
- 最小
规则:
非聚合列必须参与分组。
4.5 子查询
标量子查询
返回单值。
行子查询
返回单行。
表子查询
返回关系。
相关子查询
依赖外层查询。
4.6 集合运算
关系满足集合语义:
- 并
- 交
- 差
五、数据修改语言(DML)
5.1 插入
生成新元组。
5.2 更新
修改属性值。
5.3 删除
移除元组。
六、数据抽象层(视图)
视图是:
虚关系(逻辑表)
作用:
- 封装查询
- 隐藏结构
- 权限控制
- 逻辑分层
6.1 视图类型
普通视图
实时计算。
物化视图
持久化结果。
6.2 可更新视图条件
必须保持与单一基表可映射。
关联内容(自动生成)
- [/中间件/数据库/数据库.html](/中间件/数据库/数据库.html) SQL 建立在关系数据库理论之上,该文档提供数据库领域的总体概述与核心概念
- [/中间件/数据库/数据库系统/数据库设计.html](/中间件/数据库/数据库系统/数据库设计.html) SQL DDL 涵盖表结构设计与完整性约束,与数据库设计原则密切相关
- [/中间件/数据库/索引.html](/中间件/数据库/索引.html) SQL 查询执行机制中索引选择是核心优化手段,直接影响查询性能
- [/中间件/数据库/数据库系统/事务管理/事务.html](/中间件/数据库/数据库系统/事务管理/事务.html) SQL DML 操作涉及事务管理与 ACID 语义保障
- [/中间件/数据库/mysql/查询优化.html](/中间件/数据库/mysql/查询优化.html) SQL 查询优化器与执行计划的具体实现与调优实践
- [/中间件/数据库/mysql/存储引擎.html](/中间件/数据库/mysql/存储引擎.html) SQL 查询执行底层依赖存储引擎提供数据读写能力
- [/中间件/数据库/数据类型.html](/中间件/数据库/数据类型.html) SQL 类型系统(DDL)与数据库数据类型体系直接对应
- [/中间件/数据库/mysql/mysql.html](/中间件/数据库/mysql/mysql.html) MySQL 是 SQL 标准最广泛的实现,涵盖 SQL 特性的具体行为与扩展
- [/中间件/数据库/mysql/schema与数据类型优化.html](/中间件/数据库/mysql/schema与数据类型优化.html) SQL 表结构定义(DDL)与数据类型选择的最佳实践
- [/编程语言/JAVA/框架/ORM.html](/编程语言/JAVA/框架/ORM.html) ORM 是 SQL 关系模型与对象模型之间的抽象桥接层
- [/软件工程/架构模式/对象关系模式.html](/软件工程/架构模式/对象关系模式.html) 对象关系映射模式揭示了 SQL 关系模型在应用层的抽象方式
- [/数据技术/数据存储.html](/数据技术/数据存储.html) SQL 关系模型本质上是对数据存储与检索的高层抽象
- [/中间件/数据库/分布式数据库.html](/中间件/数据库/分布式数据库.html) 分布式数据库对 SQL 语义的扩展(跨节点事务、分布式查询)与限制