掌握 SELECT 各類查詢操作:單表、多表連接、嵌套查詢、集合查詢,鞏固關聯運算基礎。
SELECT * FROM teacher; SELECT tno, tname FROM teacher; -- 列別名 SELECT tno AS 工號, tname AS 姓名, temail AS 電子郵箱 FROM teacher; -- TOP 子句 SELECT TOP 2 * FROM teacher; SELECT TOP 67 PERCENT * FROM teacher; -- DISTINCT 去重 SELECT DISTINCT tposition FROM teacher;
SELECT tno, tname, tsalary * 0.95 FROM teacher; SELECT tno AS 工號, tname AS 姓名, tsalary * 0.95 AS 預發工資 FROM teacher;
SELECT tno, tname FROM teacher WHERE tsalary > 2800 ORDER BY tsalary ASC;
WHERE tamount > 288 ORDER BY tamount DESCWHERE tamount BETWEEN 144 AND 288WHERE tposition IN ('教授','副教授')WHERE tname LIKE '王%'、WHERE tname LIKE '_[莉,軒]%'-- ANSI 推薦 SELECT student.sno, sname, cno, grade FROM student INNER JOIN SC ON student.sno = SC.sno; -- 三表連接 SELECT student.sno, student.sname, sc.cno, course.cname, sc.grade FROM student, sc, course WHERE student.sno = sc.sno AND sc.cno = course.cno;
SELECT sno AS 學號或工號, sname AS 姓名 FROM student UNION SELECT tno, tname FROM teacher;
-- 無 HAVING SELECT '學號'=sno, '總成績'=SUM(Grade) FROM SC GROUP BY Sno; -- 有 HAVING SELECT '學號'=sno, '總成績'=SUM(Grade) FROM SC GROUP BY Sno HAVING SUM(Grade) > 160;
-- COMPUTE:總計 SELECT '學號'=sno, '成績'=Grade FROM SC ORDER BY sno COMPUTE SUM(Grade); -- COMPUTE BY:分組小計 SELECT '學號'=sno, '成績'=Grade FROM SC ORDER BY Sno COMPUTE SUM(Grade) BY sno;
差異:COMPUTE 只顯示總計;COMPUTE BY 顯示每組小計 + 總計。
-- j10011 班男生成績 SELECT SC.sno, SC.cno, SC.grade FROM SC WHERE sno IN (SELECT sno FROM student WHERE Sclass='j10011' AND Ssex='男'); -- 與教師不同名學生 SELECT sno 學號, sname 姓名 FROM student WHERE sname NOT IN (SELECT tname FROM teacher);
SELECT SC.sno, SC.cno, SC.grade FROM SC
WHERE EXISTS (
SELECT * FROM student
WHERE SC.sno = student.sno AND student.sclass = 'j10011'
);
| 類別 | 關鍵語法 | 注意事項 |
|---|---|---|
| 列別名 | AS 別名 | 含空格/保留字必加引號 |
| TOP | TOP n / TOP n PERCENT | 搭配 ORDER BY 確定順序 |
| DISTINCT | DISTINCT 欄位 | 去重整行,非單欄 |
| 計算欄位 | 運算式 AS 別名 | 不改變表資料 |
| 內連接 | INNER JOIN ... ON | ANSI-92 標準,可讀性佳 |
| UNION | UNION / UNION ALL | 欄位數/型別需對應 |
| GROUP BY | GROUP BY ... HAVING | HAVING 過濾分組,WHERE 過濾行 |
| 子查詢 | IN / EXISTS | EXISTS 通常效能優於 IN |
COMPUTE vs COMPUTE BY 輸出差異IN 改寫為 EXISTS,體會語意等價JOIN 替換子查詢,比較執行計畫本實驗涵蓋查詢操作核心語法,是進階 SQL 開發的紮實基礎。