歡迎來到關聯式數據庫與結構化查詢語言(SQL)的世界!
哈囉,未來的電腦科學家們!本章節將全面介紹 關聯式數據庫(Relational Databases) 與 SQL(結構化查詢語言,Structured Query Language)。別擔心,名字聽起來很複雜,其實 SQL 就是一套用來與關聯式數據庫進行互動和查詢的標準語言。
關聯式數據庫與鍵(Keys)
關聯式數據庫 將數據儲存在多個相關聯的 資料表(Tables,亦稱為關聯 relations)中,以消除 數據冗餘(Data redundancy,即重複數據)並維持 數據一致性(Data consistency)。
• 資料表 (Table):保存關於單一實體(例如:學生 Students、課程 Courses)的數據。
• 記錄 (Record) 或稱列 (Row):一筆完整的數據條目,包含該實體的所有屬性。
• 欄位 (Field) 或稱行 (Column):實體的特定屬性(例如:StudentName、DateOfBirth)。
• 主鍵 (Primary Key):能唯一識別資料表中每一筆記錄的欄位(或欄位組合)。
• 外鍵 (Foreign Key):某個資料表中的欄位,它連結到另一個資料表的主鍵,從而在兩者之間建立關聯。
數據庫架構標記法 (Database Schema Notation)
在數據庫設計中,資料表會使用標準標記法表示,其中主鍵會加上 底線:
Student(StudentID, StudentName, DateOfBirth, CourseID)
Course(CourseID, CourseTitle, TeacherName)
在此範例中,StudentID 是 Student 的主鍵,CourseID 是 Course 的主鍵,而 Student 內部的 CourseID 則作為 外鍵,將每位學生與其課程連結起來。
第一節:什麼是 SQL 及其用途?
SQL(結構化查詢語言)是一種聲明式語言,用於建立、查詢以及操作儲存在關聯式數據庫管理系統(RDBMS)中的數據。
SQL 指令通常分為兩大類:
1. 數據定義語言 (Data Definition Language, DDL)
DDL 指令用於定義或移除數據庫結構,例如建立或刪除資料表。
2. 數據操作語言 (Data Manipulation Language, DML)
DML 指令用於操作儲存在這些結構 內部 的數據——包括查詢、新增、修改和刪除記錄。
第二節:數據定義語言 (DDL) 指令
1. 建立資料表:CREATE TABLE
此指令用於建立一個新的資料表,包括設定其欄位名稱及數據類型(例如:INTEGER 或 TEXT)。
CREATE TABLE Books (
BookID INTEGER,
Title TEXT,
Author TEXT,
PublicationYear INTEGER
);
2. 刪除資料表:DROP TABLE
此指令會永久刪除整個資料表以及其中儲存的所有數據。
DROP TABLE Books;
第三節:查詢數據 (DML)
1. 核心查詢結構:SELECT 與 FROM
• SELECT 指定要擷取的欄位(行)。
• FROM 指定從哪個(些)資料表中擷取數據。
• 星號 (*) 作為萬用字元,代表選取所有欄位。
SELECT StudentName, Email FROM Students;
2. 過濾記錄:WHERE
WHERE 子句使用比較運算子來過濾查詢結果:=、>、<、>=、<=,以及 <>(或 !=)。
條件中的文字常值必須用單引號包起來(例如:'London')。
SELECT * FROM Students WHERE Grade = 'A';
3. 邏輯運算子:AND、OR、NOT
多個搜尋條件可以在 WHERE 子句中組合使用:
SELECT StudentName FROM Students WHERE Grade = 'A' AND City = 'London';
4. 排序記錄:ORDER BY
ORDER BY 子句用於將輸出結果按遞增(ASC,預設)或遞減(DESC)順序進行排序。
SELECT StudentName, Grade FROM Students ORDER BY StudentName ASC;
5. 多資料表查詢(合併兩個資料表)
在考試題目中,查詢可能需要從 最多兩個資料表 中擷取數據。若要合併資料表,請在 FROM 子句中列出兩個資料表,並在 WHERE 子句中將一個資料表的主鍵與另一個資料表的外鍵進行配對。
SELECT Student.StudentName, Course.CourseTitle FROM Student, Course WHERE Student.CourseID = Course.CourseID;
第四節:修改數據 (DML)
1. 新增記錄:INSERT INTO
在現有的資料表中插入一筆新記錄。
INSERT INTO Books (BookID, Title, Author) VALUES (101, 'The Great Adventure', 'A. N. Author');
2. 修改記錄:UPDATE
修改現有的數據。使用 SET 來定義新值,並使用 WHERE 指定要更新哪些記錄。
UPDATE Students SET Grade = 'A*' WHERE StudentID = 42;
警告: 如果遺漏了 WHERE 子句,將會更新資料表中的 每一筆記錄!
3. 移除記錄:DELETE FROM
根據特定條件從資料表中刪除記錄。
DELETE FROM Students WHERE City = 'London';
警告: 如果遺漏了 WHERE 子句,將會移除所有記錄,但資料表結構仍會保留。
• SELECT ... FROM ... WHERE ... ORDER BY 用於查詢(單一資料表或跨兩個資料表)。
• INSERT INTO ... VALUES ... 用於新增列。
• UPDATE ... SET ... WHERE ... 用於變更現有數據。
• DELETE FROM ... WHERE ... 用於移除列。