SQL能完成哪方面的计算?一文详解关系代数和SQL语法
数据分析的语言接口
语言简单,门槛低 语意明确,无歧义 资料丰富,方便学习 生态丰富,工具多 方便扩展,可编排复杂的逻辑
数据模型
关系代数(Relational Algebra)
SQL
SQL语言的发展历史
SQL的功能
SQL的处理过程
关系
SQL 语法
单表上的操作
[WITH with_query [,...]]
SELECT expr
FROM TABLE
WHERE bool_expr
GROUP BY columns
HAVING Condition
ORDER BY expr
LIMIT count
SELECT子句
SELECT 列名.表示从表中读取列的原始数据。
SELECT scalar_function(列名),表示读取列的原始数据,并且经过scalar_function逐行转换每一行原始数据,输出转换后结果。Scalar Function是转换函数,表示1行到1行的转换。经过转换后的数据行数不会发生改变。一个典型的转换函数是round函数,表示把原始数据截断后保留几个小数位。
SELECT aggregate_function(列名),表示读取原始数据,并且对所有的原始数据做聚合计算,输出聚合后的结果,结果只包含一行一列数据。
转换函数(scalar function)
聚合函数
选择性聚合
SELECT
key,
AGG1(x) FILTER (WHERE condition1),
AGG2(y) FILTER (WHERE condition2),
AGG3(z) FILTER (WHERE condition3),
...
FROM
Distinct 聚合
aggregate_function(all key)
aggregate_function(distinct key)
聚合中的Null值
GROUP BY分组聚合
Grouping sets操作
窗口函数
图2-6窗口函数的输出
运算符和函数
表达式
比较表达式
Bool表达式
逻辑表达式
Lambda表达式
WHERE子句
HAVING子句
Order By子句
Limit 子句
多个表间操作
Join
Set
嵌套查询
with temp_table1 as (select abc from table),
temp_table2 as (select abc from temp_table1)
select * from temp_table2
子查询表达式
出现在select输出结果中,select (select 1) as one from student。
出现在where中,select name from student where id in (select id from applied)。
ALL 表示外层表达式要满足子查询的所有结果。
ANY表示外层表达式需要满足子查询的至少一个结果。
IN 等同于ANY。
EXISTS表示至少有一行结果返回。
标量子查询(scalar subquery):只返回一行一列结果。
多行输出子查询:输出多行一列,或多行多列。
exists子查询:输出结果是bool类型。
关联子查询:子查询中引用到了外层查询的属性。 无关联子查询:子查询没有引用外层查询的属性。
标量子查询表达式
子查询用于判断集合从属关系
Exists子查询用于判定是否是空集合
子查询用于比较级和数值大小关系
子查询用于判定集合是否包含重复值
子查询的实际运行方式
Null 处理
Unnest语法
其他SQL语法
小结