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或者空。