概念
数据库组织了真实世界某些方面数据相互关系集合
- DBMS (Database Management System)允许应用存储、管理、分析数据库的信息
- MySQL, Oracle, MongoDB
- 通用的DBMS应该被设计允许
- Definition, Creation, Querying, Updation, Administration
- 关系模型(一种数据模型)
- 1970年Codd提出
- key
- 用简单的数据结构存储数据库(关系)
- 通过高级语言访问数据
- 物理存储交由实现
- Concepts
- Structure:关系的定义和内容
- Integrity:确保数据内容满足约束
- Manipulation:访问和修改数据内容
- Schema
- 一个给定的数据模型描述一个特别的数据集合
- Relation(n-ary relation,i.e. 数据库表)
- 包含属性关系的无序集合
- 因为关系无序,DBMS会允许按照最优的方式存储组织数据
- Tuple
- 关系中的一个集合的属性
- Atomic, Scalar,但现在也可以是list或者其他嵌套结构
- Attribute
- 表中的一列
- Domain
- 属性取值范围
- Relational Algebra
- 目前多用于更精确的描述数据查询的过程
- 基于集合,无序,非重复
- SQL
- DMLs
- 数据库操作语言
- Procedural:定义具体查询结果的策略
- Non-Procedural:只说明需求结果,不定义过程
- DDLs
- 数据库定义语言
- DCLs
- 安全、访问控制
- DMLs
SQL
SQL,Structured Query Language, 基于bags(可重,无序)
DML
- Join
- 组合多张表,产出一张新表
- Aggregate
- 将一部分结果作为输入,产出一个标量作为输出
- AVG(col), MIN(col), MAX(col), COUNT(col) 一些聚合函数支持DISTINCT
- select输出中如果有非聚合的值,其必须出现在后面的Group by中
- Having 可以用来过滤聚合结果(与where相似)
- String Operations
- 大小写敏感,单引号标识
- LIKE 用于字符串匹配,‘%’标识匹配任意子字符串,‘_’匹配任意单字符串
- || 用于连接字符串
- 不同数据库也有不同的字符串函数
- Date & Time
- 不同系统差异较大
- Output Redireciton
- 重定向到新表 SELECT DISTINCT cid INTO CourseIds FROM enrolled; - 重定向到现有的表 INSERT INTO CourseIds (SELECT DISTINCT cid FROM enrolled); ``` - Output control
- Order By 排序
- LIMIT 限制结果数量
- OFFSET 提供返回结果的偏移
- Nested Queries
- 嵌套查询通常更难优化
- 常出现在 SELECT, FROM, WHERE
- 嵌套查询结果常用的表达式
- ALL,ANY, IN, EXISTS
- Window Function
- 执行一个滑动计算在一个tuples集合中,与聚合类似,但是每组输出结果不被组织到单一行
- 窗函数可以是上面任意的聚合函数
- ROW_NUMBER
- RANK
- 聚合函数作为窗函数,输出截止当前为止的统计结果
- 分组,通过PARTITION 实现
<窗口函数> over (partition by <用于分组的列名>
order by <用于排序的列名>)
- Common Table Expressions
- 窗口或者嵌套查询复杂时的另一个解决方案
- 允许在单一查询语句中定义临时表
- WITH 表名 AS Query
- CTE支持嵌套,但不推荐
WITH cte1 (col1) AS (SELECT 1), cte2 (col2) AS (SELECT 2)
SELECT * FROM cte1, cte2;
主要记录一些数据库的基本概念和一些常用的SQL DML语句