關係代數是關聯式資料庫的理論基礎,SQL 則是其商業化實作。理解兩者對應,有助於撰寫更精確、高效的查詢。
| 關係代數 | SQL 關鍵字 | 說明 | 範例 |
|---|---|---|---|
| 並集 (R ∪ S) | UNION | 合併兩結果集,移除重複列 | SELECT * FROM R UNION SELECT * FROM S |
| 並集保留重複 | UNION ALL | 合併且保留重複,效能較佳 | SELECT * FROM R UNION ALL SELECT * FROM S |
| 交集 (R ∩ S) | INTERSECT | 僅保留兩結果集皆有的列 | SELECT * FROM R INTERSECT SELECT * FROM S |
| 差集 (R - S) | EXCEPT (SQL Server)MINUS (Oracle) | 在 R 中但不在 S 中的列 | SELECT * FROM R EXCEPT SELECT * FROM S |
前提:兩關聯結構必須相容(屬性數、順序、資料型別相同)。
| 關係代數 | SQL 對應 | 說明 |
|---|---|---|
| 選擇 (σcondition(R)) | WHERE condition | 依條件篩選資料列(水平切割) |
| 投影 (πattributes(R)) | SELECT attr1, attr2 ... | 只保留指定欄位(垂直切割),自動去重 |
| 關係代數 | SQL 對應 | 說明 |
|---|---|---|
| 笛卡兒積 (R × S) | CROSS JOIN 或 FROM R, S | 兩表所有列組合,極少直接使用 |
| 自然連接 (R ⋈ S) | NATURAL JOIN 或 INNER JOIN ... USING | 同名欄位自動等值連接 |
| Theta 連接 | INNER JOIN ... ON condition | 自訂連接條件 |
| 外部連接 | LEFT/RIGHT/FULL OUTER JOIN | 保留單邊無對應列 |
SQL 使用別名:SELECT a.col1 FROM TableA AS a 或 SELECT col1 AS new_name FROM TableA。
SQL 無直接關鍵字,常用 NOT EXISTS 雙重否定模擬:「找出修過『所有』必修課的學生」。
SELECT s.StudentID
FROM Students s
WHERE NOT EXISTS (
SELECT c.CourseID FROM RequiredCourses c
EXCEPT
SELECT sc.CourseID FROM StudentCourses sc WHERE sc.StudentID = s.StudentID
);
