一、基礎 DDL/DML
| 操作 | SQL Server / 通用語法 |
| 建立資料庫 | CREATE DATABASE DbName |
| 刪除資料庫 | DROP DATABASE DbName |
| 備份資料庫 | BACKUP DATABASE DbName TO DISK = 'Path.bak' |
| 建立資料表 | CREATE TABLE T (Col1 Type1 [NOT NULL] [PRIMARY KEY], Col2 Type2 ...) |
| 依現有表建表 | SELECT * INTO NewT FROM OldT WHERE 1=0 (結構) / SELECT * INTO NewT FROM OldT (結構+資料) |
| 刪除資料表 | DROP TABLE T |
| 新增欄位 | ALTER TABLE T ADD Col Type |
| 新增主鍵 | ALTER TABLE T ADD PRIMARY KEY (Col) |
| 建立索引 | CREATE [UNIQUE] INDEX IdxName ON T (Col...) |
| 建立視圖 | CREATE VIEW V AS SELECT ... |
二、基礎 DML 單表操作
| 操作 | 語法 |
| 查詢 | SELECT * FROM T WHERE Condition |
| 插入 | INSERT INTO T (C1, C2) VALUES (V1, V2) |
| 刪除 | DELETE FROM T WHERE Condition |
| 更新 | UPDATE T SET C1 = V1 WHERE Condition |
| 模糊查詢 | SELECT * FROM T WHERE C1 LIKE '%Keyword%' |
| 排序 | SELECT * FROM T ORDER BY C1, C2 [DESC] |
| 統計 | COUNT/SUM/AVG/MAX/MIN |
三、集合運算子
| 運算子 | 說明 | 去重 |
UNION | 合併結果集 | 是 |
UNION ALL | 合併結果集 | 否 (效能較好) |
EXCEPT (SQL Server) / MINUS (Oracle) | 差集 (在前不在後) | 是 |
INTERSECT | 交集 | 是 |
注意:參與運算的查詢欄位數、順序、資料型別必須相容。
四、外聯接 (JOIN)
| 類型 | 關鍵字 | 結果集 |
| 左外聯接 | LEFT [OUTER] JOIN | 左表全保留 + 匹配右表 |
| 右外聯接 | RIGHT [OUTER] JOIN | 右表全保留 + 匹配左表 |
| 完整外聯接 | FULL [OUTER] JOIN | 雙表全保留 |
SELECT a.Col1, a.Col2, b.Col3, b.Col4
FROM TableA a
LEFT OUTER JOIN TableB b ON a.Key = b.Key;
五、子查詢與衍生表
-- WHERE 子查詢
SELECT * FROM TableA WHERE Col1 IN (SELECT Col2 FROM TableB);
-- 衍生表 (FROM 子查詢)
SELECT * FROM (SELECT Col1, Col2 FROM TableA) T WHERE T.Col1 > 1;
六、BETWEEN 範圍查詢
SELECT * FROM T WHERE DateCol BETWEEN '2024-01-01' AND '2024-01-31'; -- 含邊界
SELECT * FROM T WHERE NumCol NOT BETWEEN 10 AND 20; -- 不含邊界
七、跨資料庫/異構資料存取 (SQL Server)
-- Access
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source="C:\DB.mdb"')...TableName;
-- Excel
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source="C:\Book.xls";Extended Properties=Excel 8.0')...[Sheet1$];
-- 另一 SQL Server (連結伺服器)
SELECT * FROM LinkedServer.DB.dbo.TableName;
八、實用進階片段
- 分頁 (SQL 2012+):
OFFSET @PageSize * (@PageNum-1) ROWS FETCH NEXT @PageSize ROWS ONLY
- 去重保留最新:
DELETE FROM T WHERE ID NOT IN (SELECT MAX(ID) FROM T GROUP BY KeyCol)
- 動態轉置 (行轉列):配合
PIVOT 或動態 SQL 組裝 CASE WHEN 聚合。
- 遞迴 CTE (階層查詢):
WITH CTE AS (SELECT ... UNION ALL SELECT ... FROM CTE JOIN ...)
結語
此清單涵蓋日常開發 90% 以上 SQL 場景。建議依專案資料庫平台 (SQL Server/Oracle/PostgreSQL/MySQL) 微調語法細節 (如 LIMIT/OFFSET、序列、日期函數) 後建立團隊程式碼片段庫。