SQL Server 指令雖不多,但格式多變,要靈活解決實際問題並不容易。掌握「三熟」——熟悉表結構、熟悉任務需求、熟悉指令語法,即能游刃有餘處理各類資料庫任務。本文以「學生-選課-課程」三表範例,層層拆解實戰思維。
操作前必須徹底掌握目標資料庫的 表名、欄位名、資料型別、主鍵/外鍵關係、資料樣本。以 Student 表為例:
studentSELECT 學號, 姓名 FROM student WHERE 性別 = 0 查詢計算機系女生。
唯有將表結構「爛熟於胸」,抽象指令才能轉化為動態可執行的邏輯。
明確需求,拆解為 SQL 要素:
S_Course (含「成績」欄)Student (含「所在系」欄)學號UPDATE S_Course
SET 成績 = 60
WHERE 學號 IN (
SELECT 學號 FROM Student WHERE 所在系 = '計算機'
);
Course (輸出「課程名稱」)S_Course (連結 課程號)Student (篩選 姓名 = '陳晨')Course.課程號 → S_Course.課程號 → S_Course.學號 → Student.學號SELECT 課程名稱
FROM Course
WHERE 課程號 IN (
SELECT 課程號 FROM S_Course
WHERE 學號 IN (
SELECT 學號 FROM Student WHERE 姓名 = '陳晨'
)
);
掌握 SELECT/INSERT/UPDATE/DELETE 及子查詢、JOIN、GROUP BY/HAVING、EXISTS/IN 等語法的固定骨架與可變部分,將前兩熟提取的要素精準填入。
Student (輸出姓名、性別)S_Course (聚合計數)GROUP BY 學號 HAVING COUNT(學號) >= 2,主查詢用 WHERE 學號 IN (...)SELECT 姓名, 性別
FROM Student
WHERE 學號 IN (
SELECT 學號 FROM S_Course
GROUP BY 學號 HAVING COUNT(學號) >= 2
);
SELECT 姓名, 性別, 所在系
FROM Student
WHERE 學號 IN (
SELECT 學號 FROM S_Course
WHERE 成績 IN (
SELECT MAX(成績) FROM S_Course
WHERE 課程號 IN (
SELECT 課程號 FROM Course WHERE 課程名稱 = 'C語言'
)
)
);
命令是死的,用命令的人是活的。三熟合一,遇問題不慌、遇錯誤不亂,最終高效落地。