SQL(結構化查詢語言)是資料庫操作的核心工具。掌握常用的經典語句,能大幅提升開發效率與查詢效能。本文整理 24 個實用的 SQL 技巧,涵蓋建表、複製、子查詢、連接、分頁、去重等高頻場景,附帶範例碼供參考。
適用於 Access 與 SQL Server:
-- 方法一:利用永假條件
SELECT * INTO b FROM a WHERE 1 <> 1;
-- 方法二:取前 0 筆
SELECT TOP 0 * INTO b FROM a;
INSERT INTO b (a, b, c) SELECT d, e, f FROM a;
INSERT INTO b (a, b, c)
SELECT d, e, f FROM b IN '具體資料庫路徑' WHERE 條件;
SELECT a, b, c FROM a WHERE a IN (SELECT d FROM b);
-- 或使用列表
SELECT a, b, c FROM a WHERE a IN (1, 2, 3);
SELECT a.title, a.username, b.adddate
FROM table a,
(SELECT MAX(adddate) adddate FROM table WHERE table.title = a.title) b;
SELECT a.a, a.b, a.c, b.c, b.d, b.f
FROM a LEFT OUTER JOIN b ON a.a = b.c;
SELECT * FROM (SELECT a, b, c FROM a) T WHERE t.a > 1;
BETWEEN 包含邊界值,NOT BETWEEN 則不包含。
SELECT * FROM table1 WHERE time BETWEEN time1 AND time2;
SELECT a, b, c FROM table1 WHERE a NOT BETWEEN 數值1 AND 數值2;
SELECT * FROM table1 WHERE a [NOT] IN ('值1', '值2', '值4', '值6');
DELETE FROM table1
WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.field1 = table2.field1);
SELECT * FROM a
LEFT INNER JOIN b ON a.a = b.b
RIGHT INNER JOIN c ON a.a = c.c
INNER JOIN d ON a.a = d.d WHERE ...;
SELECT * FROM 行程安排
WHERE DATEDIFF('minute', f開始時間, GETDATE()) > 5;
SELECT TOP 10 b.*
FROM (
SELECT TOP 20 主鍵欄位, 排序欄位 FROM 表名 ORDER BY 排序欄位 DESC
) a, 表名 b
WHERE b.主鍵欄位 = a.主鍵欄位
ORDER BY a.排序欄位;
SELECT TOP 10 * FROM table1 WHERE 範圍;
適用於論壇月排行、熱銷商品分析、成績排名等場景。
SELECT a, b, c FROM tablename ta
WHERE a = (SELECT MAX(a) FROM tablename tb WHERE tb.b = ta.b);
(SELECT a FROM tableA)
EXCEPT (SELECT a FROM tableB)
EXCEPT (SELECT a FROM tableC);
SELECT TOP 10 * FROM tablename ORDER BY NEWID();
SELECT NEWID();
DELETE FROM tablename
WHERE id NOT IN (SELECT MAX(id) FROM tablename GROUP BY col1, col2, ...);
SELECT name FROM sysobjects WHERE type = 'U';
SELECT name FROM syscolumns WHERE id = OBJECT_ID('TableName');
SELECT type,
SUM(CASE vender WHEN 'A' THEN pcs ELSE 0 END),
SUM(CASE vender WHEN 'C' THEN pcs ELSE 0 END),
SUM(CASE vender WHEN 'B' THEN pcs ELSE 0 END)
FROM tablename GROUP BY type;
TRUNCATE TABLE table1;
SELECT TOP 5 * FROM (
SELECT TOP 15 * FROM table ORDER BY id ASC
) table_別名 ORDER BY id DESC;