本文以「學生成績管理資料庫」為情境,系統整理 SQL 基礎到進階的常用語法與技巧,適合初學者快速建立查詢直覺。
SELECT name AS '姓名' FROM students ORDER BY age;
SELECT name '姓名' FROM students ORDER BY age; -- 簡寫
IN:WHERE native IN ('湖南','四川')BETWEEN ... AND:WHERE age BETWEEN 20 AND 30= 精確匹配LIKE 模糊匹配:'李%'(開頭)、'%李%'(包含)、'_李%'(第二字)[] 字元集合:LIKE '[AC]%' 或 LIKE '[A-C]%'smalldatetime 視為字串比較:WHERE birth >= '1980-1-1' AND birth <= '1980-12-31'
COUNT(*) 總筆數AVG(欄位) 平均值MAX/MIN 極值SELECT gender, COUNT(sno) FROM students GROUP BY gender;
SELECT grade, mno, gender, COUNT(*) FROM students GROUP BY grade, mno, gender;
SELECT sno, COUNT(*) FROM grades WHERE mark < 60 GROUP BY sno HAVING COUNT(*) > 1;
SELECT * FROM students WHERE name LIKE '張%'
UNION [ALL]
SELECT * FROM students WHERE name LIKE '李%';
JOIN ... ON,配合別名簡潔明確。LEFT JOIN 常用於「主表全顯、從表無資料亦顯示」。CROSS JOIN。IN 子查詢:查詢李山同鄉學生。EXISTS 相關子查詢:效能通常優於 IN,邏輯等價於 IN 但可利用索引。ASC/DESC 升/降序。ORDER BY 3(第三個欄位)。[] 括住。IS NULL 判斷空值。ANY(OR 邏輯)vs ALL(AND 邏輯)區別。WHERE cno <> 'B2' 錯誤,正確用 NOT EXISTS 關聯子查詢。