SELECT [DISTINCT] {* | 列名 [別名], ...}
FROM 表名
[WHERE 條件]
[ORDER BY 列名|別名|位置 [ASC|DESC]];
針對 選項列表所有列組合 去重。DISTINCT deptno, job 要求部門+崗位完全相同才算重複。
WHERE 條件過濾
| 運算子 | 示例 | 說明 |
|---|---|---|
| 比較 | sal > 2000 | >, <, >=, <=, =, != / ^= / <> |
| 範圍 | sal BETWEEN 2000 AND 3000 | 閉區間,含邊界 |
| 集合 | deptno IN (10, 20) | 等值集合 |
| 模糊 | ename LIKE 'J%' | % 多字符,_ 單字符 |
| 空值 | comm IS NULL | 不可用 = NULL |
| 邏輯 | (sal > 1000 AND deptno=10) OR job='MANAGER' | 優先級: NOT > AND > OR |
函數 說明 忽略 NULL MAX/MIN 最大/最小值 是 AVG 平均值 是 SUM 求和 是 COUNT(*) 行數 否(含 NULL 行) COUNT(expr) 非 NULL 個數 是 聚合與非聚合列不能混用
維度 WHERE HAVING 作用對象 原始行 分組後的組 可用聚合函數 否 是 可用別名 否 否(需重複表達式) 多維分組
-- 薪資高於平均薪資的員工 SELECT ename, sal FROM emp WHERE sal > (SELECT AVG(sal) FROM emp); -- 與 SMITH 同部門 SELECT * FROM emp WHERE deptno = (SELECT deptno FROM emp WHERE ename = 'SMITH');多行子查詢
-- 1. 最高薪員工姓名崗位 SELECT ename, job FROM emp WHERE sal = (SELECT MAX(sal) FROM emp); -- 2. 每個部門人數、平均薪資、最高薪資 SELECT deptno, COUNT(*), ROUND(AVG(sal),2), MAX(sal) FROM emp GROUP BY deptno; -- 3. 平均薪資超過 2000 的部門 SELECT deptno, AVG(sal) FROM emp GROUP BY deptno HAVING AVG(sal) > 2000; -- 4. 顯示員工及其主管(自連接) SELECT e.ename "員工", m.ename "主管" FROM emp e LEFT JOIN emp m ON e.mgr = m.empno;