-- 指定欄位(推薦,順序不受限)
INSERT INTO table_name (col1, col2, col3)
VALUES (val1, val2, val3);
-- 全欄位依順序(不建議,結構變動易出錯)
INSERT INTO table_name VALUES (val1, val2, val3);
-- 子查詢新增:從另一張表複製資料
INSERT INTO target_table (col1, col2)
SELECT colA, colB FROM source_table WHERE condition;
注意:資料型別必須相容;未指定欄位若有 DEFAULT 值會自動填入,否則報錯或存 NULL(視 NOT NULL 條件)。
-- 全欄位
SELECT * FROM table_name;
-- 指定欄位
SELECT col1, col2 FROM table_name;
-- 條件篩選
SELECT * FROM table_name
WHERE col1 = 'value' AND col2 > 100 OR col3 LIKE 'A%';
SELECT col1, col2 FROM table_name
ORDER BY col2 DESC; -- DESC 降序,預設 ASC 升序
SELECT COUNT(*) FROM table_name WHERE col = 'x';
SELECT SUM(amount), AVG(price), MAX(score), MIN(age) FROM table_name;
SELECT dept_id, AVG(salary) AS avg_sal
FROM employees
GROUP BY dept_id
HAVING AVG(salary) > 50000;
-- 內聯結:雙方皆有匹配
SELECT * FROM orders o
INNER JOIN customers c ON o.cust_id = c.id;
-- 左聯結:保留左表所有
SELECT * FROM customers c
LEFT JOIN orders o ON c.id = o.cust_id;
-- EXISTS 相關子查詢
SELECT * FROM table1 t1
WHERE EXISTS (SELECT 1 FROM table2 t2 WHERE t2.ref_id = t1.id);
-- IN 子查詢
SELECT * FROM table1 WHERE col1 IN (SELECT col1 FROM table2 WHERE ...);
-- 模糊比對
SELECT * FROM table1 WHERE col1 LIKE 'prefix%';
UPDATE table_name
SET col1 = 'new_val', col2 = col2 + 1
WHERE condition; -- 必須加 WHERE,否則全表更新!
DELETE FROM table_name WHERE condition; -- 同樣必須加 WHERE
TRUNCATE TABLE 可高速清空整表(不觸發 Trigger、不記錄逐行日誌、不可回滾),慎用。
| 資料庫 | 語法範例 |
|---|---|
| Access | WHERE mydate > #2000-01-01# |
| Oracle | WHERE mydate > DATE '2000-01-01' 或 TO_DATE('2000-01-01','YYYY-MM-DD') |
| SQL Server | WHERE mydate > '2000-01-01'(隱含轉換)或 CAST('2000-01-01' AS DATE) |
| MySQL / PostgreSQL | WHERE mydate > '2000-01-01' |
程式中參數化查詢時,直接傳遞 DateTime 物件,避免字串格式問題。
BULK INSERT/COPY。UPDATE/DELETE 先跑 SELECT 確認影響範圍。EXPLAIN/Execution Plan 分析慢查詢。BEGIN TRAN、COMMIT/ROLLBACK 確保一致性。