Alias
Alias就是表别名的意思。在join语句中,如果不指定某一列属于哪一张表,那么数据库会因为不知道某一列到底是属于哪一张表,从而报错。
代码语言:javascript复制select
orders.order_item,
inventory.inventory_item
from orders
inner join inventory
on orders.order_item = inventory.inventory_item
而表别名(Alias)让人们不至于在join语句中写那么冗长的全表表名,代以简单的别名。
代码语言:javascript复制select
o.order_item,
i.inventory_item
from orders o
inner join inventory i
on o.order_item = i.inventory_item
Begin Transaction
事务是包裹着一系列SQL的语句,通过事务可以使得事务里面的SQL可以一次性commit,或者是回滚。
代码语言:javascript复制begin transaction
update orders
set status = 'sent'
where order_id = '12345'
update orders
set status = 'sent'
where order_id = '54321'
commit transaction
CTEs v Subqueries
SQL CTE,即Common Table Expressions,常常用于过滤数据集赋以别名,并且在稍后的查询中使用到它。
代码语言:javascript复制with orderset as
(select
order_id,
order_item
from orders
where order_id between '12345' and '54321'
),
with inventoryset as
(select
inventory_item
inventory_balance
from inventory
)
select
orderset.order_id,
inventoryset.inventory_balance
from inventoryset
join orderset
on orderset.order_item = inventoryset.inventory_item
Design
数据集市一般有两种设计模型:星型模型和雪花型模型。这两种模型由两种表组成:
- 维度表:描述客观属性的表
- 事实表:描述发生了什么的表
ETL
ETL,即 Extract, Transform, Load。ETL表示着将数据从一个数据库迁移到另一个数据库的过程。
ETL的过程主要是由数据工程或数据开发团队负责。
Function
在 SQL Server 中,一组为了完成特定功能的SQL语句集被称为存储过程,而在Postgre SQL中被称为函数(Function)。
它可以在数据库中被当作一个表达式正常使用,也可以传入参数返回一个动态的值。
Group By
SQL 的聚合函数允许我们针对特定的列执行诸如SUM, COUNT, MIN, MAX, AVERAGE等操作。
而Group By操作类似于Excel里面的透视表,表示根据某个字段进行分组聚合。
代码语言:javascript复制select
order_item,
sum(amount_due)
from orders
group by order_item;
Heaped Storage
Heaped Storage,用来描述没有带索引的数据库表。数据没有按特定的顺序组织起来,且新数据只是简单的添加到最后一行。因此如果要查询比较大的表,就必须使用索引。
索引分为两大类:
- 聚集索引
- 非聚集索引
Integrity
即数据库完整性,用来确保数据在逻辑上的一致性、正确性、有效性和相容性。 包括:
- 实体完整性:每张表都有一个唯一的主键
- 引用完整性:每张表的外键都可以引用到另一张表的主键
- 域完整性:表中的列都有字段类型和长度
Join
当一张表无法获得所有信息时,就需要关联另一张表以获得完整的信息。
Key
主键自身是唯一的,且确保每一列的数据都是唯一的。
- 它可以确保表中没有重复数据
- 它不可为空
- 每张表仅有一个主键
Lock
当两个用户同时更新或查询同一张表时,有可能会锁住(Lock),直到第一个事务完成。
Massive Parallel Processing
例如Redshift这种数据库,可以在分布式系统里的各个节点同时进行查询和处理。
Normalisation
即数据库三范式。
- 1NF:字段不可分;
- 2NF:有主键,非主键字段依赖主键;
- 3NF:非主键字段不能相互依赖;
OLTP v OLAP
- OLTP:Online Transaction Processing,常用于数据的快速处理反应
- OLAP:Online Analytics Processing,常用于存储历史数据和数据挖掘。
Privileges
用于确保某些人只能查询和处理特定的数据,即用户权限。
代码语言:javascript复制GRANT ALL ON [table] TO [group] ;
-- if you would like them to SELECT, UPDATE and DELETE
GRANT SELECT ON [table] TO [group] ;
-- if you would like them to be able to only SELECT
Query Plan
执行计划,用于查看所执行的SQL的执行过程,以便于更好的优化SQL。
代码语言:javascript复制explain
select
orders.order_item,
inventory.inventory_item
from orders
inner join inventory
on orders.order_item = inventory.inventory_item
Recovery
灾备恢复,一般与log、日志备份和复制有关,用以确保发生自然灾难、硬件故障或者是人为错误时,数据库依然正常。
- Failover
- Mirroring
- Replication
System Tables
系统表用于存储数据内部对象的相关信息。
Truncate v Drop
删除表里的所有数据
Union
join是水平扩展数据,而union则是纵向扩展数据。
View
视图不是物理意义上的表,而是一系列的查询的抽象。
Window Function
窗口函数不像是聚合函数,而是跨行计算,并且把结果填到到每一行中。
代码语言:javascript复制select
order_id,
order_name
order_date,
rank() over(order amount_due desc) [rank]
from dbo.orders
XML
这个有凑数嫌疑
Year
Pass
Zero
Null表示这一行不存在,而不是0或者空。