本文以 MySQL/MariaDB 語法為主 (SQL Server/Oracle 語法於註記說明),展示三大常用 SQL 技巧:日期格式化輸出、多表聯結查詢、CASE WHEN 條件判斷轉換。
資料表 user 欄位 time (DATETIME) 需輸出 yyyy-MM-dd 格式:
SELECT u.id, u.userId, u.timeType,
DATE_FORMAT(u.time, '%Y-%m-%d') AS time,
u.secondId
FROM `user` u;


常用格式代碼:%Y 四位年、%m 雙位月、%d 雙位日、%H 24時、%i 分、%s 秒、%W 週名、%M 月名。
跨資料庫對照:
| 資料庫 | 函數/語法 | 範例 |
|---|---|---|
| MySQL/MariaDB | DATE_FORMAT(date, format) | DATE_FORMAT(NOW(), '%Y-%m-%d') |
| SQL Server | FORMAT(date, format) / CONVERT(varchar, date, style) | FORMAT(GETDATE(), 'yyyy-MM-dd') / CONVERT(varchar, GETDATE(), 23) |
| Oracle | TO_CHAR(date, format) | TO_CHAR(SYSDATE, 'YYYY-MM-DD') |
| PostgreSQL | TO_CHAR(date, format) | TO_CHAR(NOW(), 'YYYY-MM-DD') |
三表結構:



需求:主表 user 聯結 name (顯示 username) 與 second (顯示 secondname)。
SELECT u.id, n.name AS username, u.timeType, u.time, s.name AS secondname
FROM `user` u
INNER JOIN `name` n ON u.userId = n.id
INNER JOIN `second` s ON u.secondId = s.id;

| 類型 | 關鍵字 | 結果 |
|---|---|---|
| 內部聯結 | INNER JOIN / JOIN | 兩表皆符合條件的列 |
| 左外部聯結 | LEFT JOIN / LEFT OUTER JOIN | 左表所有列 + 右表符合列 (無符合則 NULL) |
| 右外部聯結 | RIGHT JOIN | 右表所有列 + 左表符合列 |
| 完整外部聯結 | FULL JOIN / FULL OUTER JOIN | 兩表所有列 (MySQL 不支援,用 UNION 模擬) |
| 交叉聯結 | CROSS JOIN | 笛卡兒積 (M×N 列) |
資料表 user 欄位 timeType (INT):2 →「每月第二天」、4 →「每月第四天」。
SELECT u.id, u.userId,
CASE u.timeType
WHEN 2 THEN '每月第二天'
WHEN 4 THEN '每月第四天'
ELSE '其他'
END AS timeTypeDesc,
u.time, u.secondId
FROM `user` u;


CASE col WHEN val1 THEN r1 WHEN val2 THEN r2 ELSE r0 END (等值比較)。CASE WHEN cond1 THEN r1 WHEN cond2 THEN r2 ELSE r0 END (任意布林條件,如範圍、複合條件)。-- 動態排序
ORDER BY CASE @sortCol WHEN 'name' THEN name WHEN 'date' THEN date END;
-- 條件群組統計
SELECT CASE WHEN score >= 90 THEN '優'
WHEN score >= 80 THEN '良'
WHEN score >= 60 THEN '及格'
ELSE '不及格' END AS grade,
COUNT(*) AS cnt
FROM scores
GROUP BY grade;
SELECT u.id,
DATE_FORMAT(u.time, '%Y-%m-%d') AS date,
n.name AS username,
s.name AS secondname,
CASE u.timeType
WHEN 2 THEN '每月第二天'
WHEN 4 THEN '每月第四天'
ELSE '未定義'
END AS schedule
FROM `user` u
INNER JOIN `name` n ON u.userId = n.id
INNER JOIN `second` s ON u.secondId = s.id
WHERE u.time >= '2024-01-01'
ORDER BY u.time DESC;
掌握日期格式化、多表聯結、CASE WHEN 三大核心技巧,即可應對 80% 以上的業務查詢開發需求。