S'S ALGORITHM

base

(Clear everything and start from begining.)

类型:

Imperative vs Declarative:

SQLStandards是指SQL(结构化查询语言)的标准规范,由国际标准化组织(ISO)和美国国家标准协会(ANSI)制定,这些标准定义了SQL的语法、功能和行为,确保不同数据库系统的兼容性和一致性,主要版本包括SQL-86、SQL-89、SQL-92、SQL:1999、SQL:2003、SQL:2008、SQL:2011和SQL:2016。

Columns:又可以叫做degrees,attributes,一个列可以叫做Column,Domain,Constraint(约束)。同一个东西。

OLTP&OLAP:前者是事务性处理,后者是分析目的的处理。前者的构架主要是应用端的客户信息记录,后者的构架则是在ETL中充当数据存储的数据库,然后供下游分析使用。

Database Models

Database Models是指用于组织、存储和管理数据的结构和方法。

Hierarchical Model

Hierarchical模型是一种数据库模型,其中数据按树形结构组织,每个记录(节点)有一个单一的父节点和多个子节点,也就是一对多关系,类似于文件系统的目录结构。它常用于早期的数据库系统和某些特定应用,如IBM的IMS数据库,适合处理层次关系明显的数据,但在灵活性和查询复杂关系方面有限。

Network Model

Network Model是一种数据库模型,它通过图结构来表示数据和它们之间的关系。在这种模型中,数据实体被表示为节点,实体之间的关系被表示为边(链接)。这种模型允许多对多关系,并且比层次模型更灵活。Network Model的一个典型实现是CODASYL(Conference on Data Systems Languages)数据库模型,早期数据库系统如IDMS(Integrated Database Management System)就是基于这种模型。Network Model适合复杂关系的数据,但查询语言通常较为复杂,不如关系模型直观。

Relational Model

Relational Model是一种数据库模型,通过二维表格(关系)来组织数据,每个表由行(记录)和列(字段)组成。行代表数据项,列代表数据属性。关系模型的核心概念包括表(relation)、键(key)、关系(relationship),以及使用SQL(结构化查询语言)进行数据查询和操作。这种模型提供了高度的数据独立性和灵活性,是目前最广泛使用的数据库模型,常见的关系数据库管理系统(RDBMS)有MySQL、PostgreSQL、Oracle、SQL Server等。

OLTP&OLAP:一个是事务处理,一个是分析处理。前者主要是数据行为记录,后者主要是数据分析用途。

Postgre

aggregate functions(聚合函数)和scalar functions(标量函数)

聚合函数对一组行进行操作,并返回一个单一的值。它们常用于数据汇总和分析,尤其是在GROUP BY子句中,帮助从一组数据中计算总体值。常见的聚合函数有:

  1. COUNT(): 计算特定列或行的数量。
    • SELECT COUNT(*) FROM Employees; // 计算Employees表中的行数。
  2. SUM(): 计算数值列的总和。
    • SELECT SUM(Salary) FROM Employees; // 计算Employees表中Salary列的总和。
  3. AVG(): 计算数值列的平均值。
    • SELECT AVG(Salary) FROM Employees; // 计算Employees表中Salary列的平均值。
  4. MAX(): 返回列中的最大值。
    • SELECT MAX(Salary) FROM Employees; // 查找Employees表中Salary列的最大值。
  5. MIN(): 返回列中的最小值。
    • SELECT MIN(Salary) FROM Employees; // 查找Employees表中Salary列的最小值。
  6. GROUP_CONCAT(): 将多行的值合并成一个字符串,通常使用逗号或指定的分隔符。
    • SELECT GROUP_CONCAT(Name) FROM Employees; // 将Employees表中Name列的所有值合并成一个字符串。

标量函数对单个值(而不是一组值)进行操作,并返回一个单一的值。它们通常用于转换数据或从数据中提取信息。常见的标量函数有:

  1. UPPER(): 将字符串转换为大写。
    • SELECT UPPER(Name) FROM Employees; // 将Name列的值转换为大写。
  2. LOWER(): 将字符串转换为小写。
    • SELECT LOWER(Name) FROM Employees; // 将Name列的值转换为小写。
  3. LEN() 或 LENGTH(): 返回字符串的长度。
    • SELECT LENGTH(Name) FROM Employees; // 返回Name列中每个值的长度。
  4. ROUND(): 对数值进行四舍五入。
    • SELECT ROUND(Salary, 2) FROM Employees; // 将Salary列的值四舍五入到小数点后两位。
  5. NOW(): 返回当前的日期和时间。
    • SELECT NOW(); // 返回当前的日期和时间。
  6. DATE(): 从日期或日期时间值中提取日期部分。
    • SELECT DATE(HireDate) FROM Employees; // 从HireDate列提取日期部分。
  7. CONCAT(): 连接两个或多个字符串。
    • SELECT CONCAT(FirstName, ' ', LastName) AS FullName FROM Employees; // 将FirstNameLastName列的值连接成一个完整的名字。

SQL tips

使用双引号,而不是单引号

select 
  first_name as "first name" 
from 
  "Users"
;

where 语句判断顺序:

  1. Parenthesis(括号)

  2. Arithmetic Operators(算数运算符)

  3. Concatenation Operators(连接运算符)

  4. Comparison Conditions(比较运算符)

  5. IS NULL, LIKE, NOT IN, etc.

  6. NOT

  7. AND

  8. OR

运算符优先级:From - Where - Select

NULL的运算结果都是NULL:谨慎使用

select * from table where column != null will return nothing

use is instead:

select * from table where column is not null

coalescing:

返回第一个不是null的值:

select coalesce(
   <column1>,
   <column2>,
   <column3>,
   'Empty'
) as combined_columns
from
  <table>

timezone

SET timezone = 'America/New_York';

-- 设置会话时区为 UTC+2
SET timezone = '+02:00';

-- 插入一个时间戳
INSERT INTO events (event_time) VALUES ('2024-06-22 10:00:00');

-- 检索时间戳
SELECT event_time FROM events;

resources