SQL入門之從A到Z
- 2019 年 10 月 8 日
- 筆記
Alias
Alias就是表別名的意思。在join語句中,如果不指定某一列屬於哪一張表,那麼數據庫會因為不知道某一列到底是屬於哪一張表,從而報錯。
select orders.order_item, inventory.inventory_item from orders inner join inventory on orders.order_item = inventory.inventory_item
而表別名(Alias)讓人們不至於在join語句中寫那麼冗長的全表表名,代以簡單的別名。
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,或者是回滾。
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,常常用於過濾數據集賦以別名,並且在稍後的查詢中使用到它。
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裏面的透視表,表示根據某個字段進行分組聚合。
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
用於確保某些人只能查詢和處理特定的數據,即用戶權限。
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。
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
窗口函數不像是聚合函數,而是跨行計算,並且把結果填到到每一行中。
select order_id, order_name order_date, rank() over(order amount_due desc) [rank] from dbo.orders
XML
這個有湊數嫌疑
Year
Pass
Zero
Null表示這一行不存在,而不是0或者空。