本手冊收錄標準 SQL 核心語句語法,涵蓋查詢 (SELECT)、定義 (DDL)、操縱 (DML)、連接 (JOIN)、聚合 (GROUP BY/HAVING)、條件 (WHERE/CASE)、集合運算、事務控制。適用於 MySQL、PostgreSQL、SQL Server、Oracle、SQLite 等主流資料庫(細節差異請查閱各廠商文檔)。
SELECT [DISTINCT] col1, col2, ... FROM table_name [WHERE condition] [GROUP BY col_list] [HAVING condition] [ORDER BY col_list [ASC|DESC]] [LIMIT offset, count];
-- 比較 = <> (!=) > < >= <= -- 範圍/集合 BETWEEN val1 AND val2 IN (val1, val2, ...) NOT IN (...) -- 模糊 LIKE pattern -- % 任意長度, _ 單字符 NOT LIKE pattern -- 空值 IS NULL / IS NOT NULL -- 邏輯 AND / OR / NOT -- 優先級: NOT > AND > OR,建議加括號
-- 簡單 CASE CASE expr WHEN v1 THEN r1 WHEN v2 THEN r2 ELSE r_def END -- 搜尋 CASE CASE WHEN cond1 THEN r1 WHEN cond2 THEN r2 ELSE r_def END
CREATE DATABASE [IF NOT EXISTS] db_name [CHARSET utf8mb4 COLLATE utf8mb4_0900_ai_ci]; DROP DATABASE [IF EXISTS] db_name; ALTER DATABASE db_name CHARSET utf8mb4;
CREATE TABLE [IF NOT EXISTS] tbl_name (
col1 type [NOT NULL] [DEFAULT val] [AUTO_INCREMENT] [COMMENT '...'],
col2 type ...,
PRIMARY KEY (col1),
UNIQUE KEY uk_name (col2),
INDEX idx_name (col3),
FOREIGN KEY (col4) REFERENCES other_tbl(col) [ON DELETE CASCADE]
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
DROP TABLE [IF EXISTS] tbl_name;
TRUNCATE TABLE tbl_name; -- 清空表、重置自增、不可回滾
ALTER TABLE tbl_name
ADD COLUMN col_new type [attrs],
DROP COLUMN col_old,
MODIFY COLUMN col_exist type [attrs],
CHANGE COLUMN old_name new_name type [attrs],
ADD PRIMARY KEY (col),
DROP PRIMARY KEY,
ADD INDEX idx_name (col),
DROP INDEX idx_name,
ADD FOREIGN KEY (col) REFERENCES other(col),
DROP FOREIGN KEY fk_name;
CREATE [UNIQUE] INDEX idx_name ON tbl_name (col1, col2); DROP INDEX idx_name ON tbl_name; -- MySQL ALTER TABLE tbl_name DROP INDEX idx_name; -- MySQL 別名
CREATE [OR REPLACE] VIEW view_name AS SELECT ... FROM ... WHERE ...; DROP VIEW [IF EXISTS] view_name;
INSERT INTO tbl (col1, col2) VALUES (val1, val2), (val3, val4); INSERT INTO tbl (col1, col2) SELECT col_a, col_b FROM other_tbl WHERE ...; INSERT IGNORE INTO tbl ...; -- 忽略重複鍵 INSERT INTO tbl ... ON DUPLICATE KEY UPDATE col = VALUES(col), ...; -- Upsert
UPDATE tbl SET col1=val1, col2=val2 [WHERE condition]; -- 多表更新 (MySQL) UPDATE tbl_a a JOIN tbl_b b ON a.id=b.a_id SET a.col=b.val WHERE ...;
DELETE FROM tbl [WHERE condition]; -- 多表刪除 (MySQL) DELETE a FROM tbl_a a JOIN tbl_b b ON a.id=b.a_id WHERE ...;
-- 內連接 SELECT ... FROM t1 INNER JOIN t2 ON t1.col = t2.col; SELECT ... FROM t1 JOIN t2 ON t1.col = t2.col; -- 同義 -- 左連接 SELECT ... FROM t1 LEFT JOIN t2 ON t1.col = t2.col; -- 右連接 SELECT ... FROM t1 RIGHT JOIN t2 ON t1.col = t2.col; -- 完全連接 (MySQL 不支援,用 UNION 模擬) SELECT ... FROM t1 FULL JOIN t2 ON t1.col = t2.col; -- 交叉連接 (笛卡兒積) SELECT ... FROM t1 CROSS JOIN t2;
SELECT col, COUNT(*), SUM(col), AVG(col), MIN(col), MAX(col) FROM tbl [WHERE ...] GROUP BY col [HAVING agg_condition];
COUNT(*) / COUNT(col) / COUNT(DISTINCT col)SUM(col) / AVG(col)MIN(col) / MAX(col)GROUP_CONCAT(col SEPARATOR ',') (MySQL)STRING_AGG(col, ',') (PostgreSQL/SQL Server 2017+)-- MySQL SELECT a, b, COUNT(*) FROM t GROUP BY a, b WITH ROLLUP; -- PostgreSQL/SQL Server/Oracle SELECT a, b, COUNT(*) FROM t GROUP BY ROLLUP (a, b); SELECT a, b, COUNT(*) FROM t GROUP BY CUBE (a, b); SELECT a, b, COUNT(*) FROM t GROUP BY GROUPING SETS ((a), (b), ());
SELECT col FROM t1 UNION SELECT col FROM t2; -- 去重 SELECT col FROM t1 UNION ALL SELECT col FROM t2; -- 保留重複 SELECT col FROM t1 INTERSECT SELECT col FROM t2; -- 交集 (MySQL 8.0+) SELECT col FROM t1 EXCEPT SELECT col FROM t2; -- 差集 (MySQL 8.0+)
START TRANSACTION; -- 或 BEGIN; -- SQL statements... COMMIT; -- 提交 ROLLBACK; -- 回滾 SAVEPOINT sp1; ROLLBACK TO sp1; -- 保存點
GRANT SELECT, INSERT ON db.* TO 'user'@'host' IDENTIFIED BY 'pass'; REVOKE INSERT ON db.* FROM 'user'@'host'; CREATE USER 'user'@'host' IDENTIFIED BY 'pass'; DROP USER 'user'@'host'; FLUSH PRIVILEGES;
| 類別 | 函數 |
|---|---|
| 字串 | CONCAT, SUBSTRING, TRIM, REPLACE, UPPER, LOWER, LENGTH, CHAR_LENGTH, LOCATE, LEFT, RIGHT |
| 數值 | ROUND, CEIL, FLOOR, ABS, MOD, POW, SQRT, RAND, FORMAT |
| 日期時間 | NOW, CURDATE, CURTIME, DATE, TIME, YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, DATE_ADD, DATE_SUB, DATEDIFF, DATE_FORMAT, STR_TO_DATE, UNIX_TIMESTAMP, FROM_UNIXTIME |
| 流程控制 | IF, CASE, COALESCE, NULLIF, IFNULL, ISNULL |
| 資訊 | VERSION, CONNECTION_ID, DATABASE, USER, LAST_INSERT_ID, ROW_COUNT |
LIMIT offset, count / LIMIT count OFFSET offsetINSERT ... ON DUPLICATE KEY UPDATEREPLACE INTOSHOW DATABASES/TABLES/COLUMNS/INDEX/STATUS/PROCESSLIST/ENGINES/VARIABLESEXPLAIN [FORMAT=JSON|TREE] SELECT ...ANALYZE TABLE, OPTIMIZE TABLE, CHECK TABLE, REPAIR TABLELOCK TABLES / UNLOCK TABLESSET NAMES utf8mb4, SET time_zone = '+00:00'本手冊作為日常開發、面試複習、SQL 審核的桌邊參考。記住:標準 SQL 是基線,各資料庫有擴展與差異,生產環境必查官方文檔。將常用語法內化為肌肉記憶,讓寫 SQL 如行雲流水。