SQL 系列
資料庫學習一 資料庫導論: https://blog.yexca.net/archives/86
資料庫學習二 關聯式模型: 本文
資料庫學習三 SQL 語言: https://blog.yexca.net/archives/88
資料庫學習四 關聯式資料庫理論: https://blog.yexca.net/archives/89
資料庫學習五 範式: https://blog.yexca.net/archives/90
資料庫學習六 資料庫設計: https://blog.yexca.net/archives/91
資料庫學習七 資料庫的控制功能: https://blog.yexca.net/archives/92
關聯式模型中的基本術語
關聯式資料庫系統是支援關聯式模型的資料庫系統。有關關聯式模型的一些基本術語如下:
- 關聯 (Relation):一個關聯就是一張二維表,每個關聯有一個關聯名稱
- 元組 (Tuple):表中的一行即為一個元組,對應儲存檔案中的一個記錄值
- 屬性 (Attribute):表中的列稱為屬性,每一列有一個屬性名稱,屬性值相當於記錄中的資料項或者欄位值
- 域 (Domain):屬性的取值範圍,即不同元組對同一個屬性的值所限定的範圍
- 關聯式模式 (Relation Schema):對關聯的描述稱為關聯式模式,由關聯名稱和其屬性集合構成,關聯式模式的格式為:
關聯名(屬性名 1,···,屬性名 n)
通常一個關聯式模式對應一個關聯檔案的結果
- 候選鍵 (Candidate Key):屬性或屬性組合,其值能夠唯一地識別一個元組
- 主鍵 (Primary Key):在一個關聯中可能有多個候選鍵,從中選擇一個作為主鍵
- 主屬性:包含在任何候選鍵中的屬性稱為主屬性,不包含在任何候選鍵中的屬性稱為非主屬性
- 外鍵 (Foreign Key):如果一個關聯中的屬性或屬性組並非該關聯的鍵,但它們是另外一個關聯的鍵,則稱其為該關聯的外鍵
- 全鍵 (All-key):關聯式模式的所有屬性組是這個關聯式模式的候選鍵,稱為全鍵
- 超鍵 (Super Key):一個包含鍵的屬性集稱為超鍵
關聯式模型的定義
關聯的描述稱為關聯式模式,它可以形式化地表示為:R(U, D, dom, F)
其中 R 為關聯名,U 為組成該關聯的屬性名集合,D 為屬性組 U 中屬性所來自的域,dom 為屬性向域的映射集合,F 為屬性間資料的相依關係集合
通常簡記為 R(U) 或 R($A_1$, $A_2$, ···),其中 R 為關聯名,U 為屬性名集合,$A_1$、··· 為各屬性名
關聯式模型由關聯資料結構、關聯操作集合和關聯完整性限制三部分組成
關聯資料結構
關聯式模型中資料的邏輯關係是一張二維表格
關聯操作集合
關聯式模型給出了關聯操作的能力
常見的關聯操作有:選擇、投影、連接、除法、聯集、交集、差集等查詢操作和增加、刪除操作等
關聯完整性限制
關聯式模型中的三個完整性規則如下:
- 實體完整性 (Entity Integrity):關聯中主鍵的值不能為空或部分為空,也就是說,主鍵中屬性即主屬性不能取空值
- 參照完整性 (Referential Integrity):如果關聯 $R_2$ 的外鍵 X 與關聯 $R_1$ 的主鍵相對應 (基本關聯 $R_1$ 和 $R_2$ 不一定是不同的關聯,即它們可以是同一個關聯),則外鍵 X 的每一個值必須在關聯 $R_1$ 中主鍵的值中找到,或者為空值
- 使用者定義完整性 (User-defined Integrity):指使用者對某一具體資料指定的約束條件進行檢驗
關聯代數運算子
| 運算子 | 符號 | 含義 |
|---|---|---|
| 集合運算子 | ∪ – ∩ × | 聯集 (Union) 差集 (Difference) 交集 (Intersection) 笛卡兒積 (Cartesian Product) |
| 專門的關聯運算子 | σ π ⋈ ÷ | 選擇 (Selection) 投影 (Projection) 連接 (Join) 除法 (Division) |
| 比較運算子 | > ≥ < ≤ = ≠ | 大於 大於等於 小於 小於等於 等於 不等於 |
| 邏輯運算子 | ¬ ∧ ∨ | 非 (NOT) 與 (AND) 或 (OR) |
傳統的集合運算

專門的關聯運算子
- 連接 (Join)
連接有 θ 連接、等值連接與自然連接
- θ 連接:連接條件不為等於
- 等值連接:連接條件為等於
- 自然連接:除去重複屬性的等值連接。最常用的連接運算
- 投影 (Projection)
投影運算是從關聯的垂直方向進行運算,在關聯 R 中選出若干屬性列 A 組成新的關聯,記作 $π_A(R)$
- 選擇 (Selection)
選擇運算是從關聯的水平方向進行運算,是從關聯 R 中選擇滿足給定條件的元組,記作 $σ_F(R)$

- 外連接 (Outer Join)
外連接運算是連接運算的擴展,可以處理由於連接運算而缺失的資訊
- 左外連接 (Left Outer Join):取出左側關聯中所有與右側關聯中任一元組都不匹配的元組,用空值 null 填充所有來自右側關聯的屬性
- 右外連接 (Right Outer Join):取出右側關聯中所有與左側關聯中任一元組都不匹配的元組,用空值 null 填充所有來自左側關聯的屬性
- 全外連接 (Full Outer Join):完成左外連接和右外連接的操作
- 除法 (Division)

符號轉 SQL 語言
關聯 R:
| A | B | C |
|---|---|---|
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
投影轉 SQL 語言
$π_?(?)$
| |
$π_{A, B, C}(R)$ 或者 $π_{1, 2, 3}(R)$
| |
註:SQL 語言不支援列 (屬性) 的序號
選擇轉 SQL 語言
$π_?(σ_?(?))$
| |
$π_{A, B, C}(σ_{B >= '5'}(R))$ 或者 $π_{1, 2, 3}(σ_{2 >= '5'}(R))$
| |
笛卡兒積轉 SQL 語言
$π_{R.A, R.B, R.C, S.A, S.B, S.D}(R×S)$
| |
自然連接轉 SQL 語言
關聯 R(A, B, C) 與 S(B, C, D)
$π_{R.A, R.B, R.C, S.D}(σ_{R.B = S.B ∩ R.C = S.C}(R×S))$
| |