DBMS基础&SQL | 青训营笔记

118 阅读3分钟

概念

数据库组织了真实世界某些方面数据相互关系集合

  • DBMS (Database Management System)允许应用存储、管理、分析数据库的信息
    • MySQL, Oracle, MongoDB
  • 通用的DBMS应该被设计允许
    • Definition, Creation, Querying, Updation, Administration
  • 关系模型(一种数据模型)
    • 1970年Codd提出
    • key
      • 用简单的数据结构存储数据库(关系)
      • 通过高级语言访问数据
      • 物理存储交由实现
    • Concepts
      • Structure:关系的定义和内容
      • Integrity:确保数据内容满足约束
      • Manipulation:访问和修改数据内容
  • Schema
    • 一个给定的数据模型描述一个特别的数据集合
  • Relationn-ary relation,i.e. 数据库表)
    • 包含属性关系的无序集合
    • 因为关系无序,DBMS会允许按照最优的方式存储组织数据
  • Tuple
    • 关系中的一个集合的属性
    • Atomic, Scalar,但现在也可以是list或者其他嵌套结构
  • Attribute
    • 表中的一列
  • Domain
    • 属性取值范围
  • Relational Algebra
    • 目前多用于更精确的描述数据查询的过程
    • 基于集合,无序,非重复
  • SQL
    • DMLs
      • 数据库操作语言
      • Procedural:定义具体查询结果的策略
      • Non-Procedural:只说明需求结果,不定义过程
    • DDLs
      • 数据库定义语言
    • DCLs
      • 安全、访问控制

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语句