整理常用且易忘的 SQL 技巧,涵蓋 DDL/DML 基礎、集合運算、外部連結、子查詢、分頁與條件篩選等實戰模式,方便開發隨時查閱。
CREATE DATABASE name; DROP DATABASE name;CREATE TABLE t (c1 TYPE, ...); DROP TABLE t;CREATE TABLE new LIKE old; / CREATE TABLE new AS SELECT * FROM old WHERE 1=0;ALTER TABLE t ADD col TYPE; ALTER TABLE t DROP COLUMN col;CREATE INDEX idx ON t(col); ALTER TABLE t ADD PRIMARY KEY (col);CREATE VIEW v AS SELECT ...; DROP VIEW v;-- 條件篩選 SELECT * FROM t WHERE col LIKE '%keyword%'; SELECT * FROM t WHERE col BETWEEN val1 AND val2; -- 含邊界 SELECT * FROM t WHERE col NOT BETWEEN val1 AND val2; -- 排序與分頁 SELECT * FROM t ORDER BY col1, col2 DESC LIMIT 10 OFFSET 20; -- 聚合函數 SELECT COUNT(*) AS total, SUM(col), AVG(col), MAX(col), MIN(col) FROM t;
UNION:合併結果並去重;UNION ALL 保留重複行,效能更好。EXCEPT(或 MINUS):第一集合減去第二集合;EXCEPT ALL 保留重複。INTERSECT:取交集;INTERSECT ALL 保留重複。SELECT a.*, b.col FROM a LEFT JOIN b ON a.id = b.a_id;
WHERE col IN (SELECT ...) / WHERE col IN (val1, val2)SELECT * FROM (SELECT a,b FROM t) AS dt WHERE dt.a > 1;| 功能 | Access | SQL Server |
|---|---|---|
| 布林值 | True/False | 1/0 或 bit |
| 日期字面值 | #2023-01-01# | '2023-01-01' |
| 當前日期 | Now() / Date() | GETDATE() |
| 日期差 | DateDiff('d', d1, d2) | DATEDIFF(day, d1, d2) |
| 自動編號 | AutoNumber | IDENTITY(1,1) |
SELECT a.title, a.user, b.max_date FROM t a JOIN (SELECT title, MAX(adddate) max_date FROM t GROUP BY title) b ON a.title=b.title AND a.adddate=b.max_date;JOIN 配合 UPDATE/DELETE 替代子查詢,效能更佳。