彙總高頻 SQL 模式,涵蓋 DDL、DML、進階查詢、分頁、去重、隨機抽樣等實戰場景。
-- 建庫/刪庫
CREATE DATABASE dbname;
DROP DATABASE dbname;
-- 建表/刪表
CREATE TABLE t (id INT PRIMARY KEY, name VARCHAR(50));
DROP TABLE t;
-- 備份/還原(SQL Server)
BACKUP DATABASE pubs TO DISK='c:\bak\pubs.bak';
RESTORE DATABASE pubs FROM DISK='c:\bak\pubs.bak';
-- 增刪改查
INSERT INTO t (id,name) VALUES (1,'a');
DELETE FROM t WHERE id=1;
UPDATE t SET name='b' WHERE id=1;
SELECT * FROM t WHERE name LIKE '%a%';
| 運算符 | 效果 |
|---|---|
UNION | 合併結果集,去重 |
UNION ALL | 合併結果集,保留重複 |
EXCEPT | 差集(在表1不在表2) |
INTERSECT | 交集 |
-- 左連接
SELECT a.*, b.col FROM a LEFT JOIN b ON a.id=b.a_id;
-- 右連接
SELECT a.*, b.col FROM a RIGHT JOIN b ON a.id=b.a_id;
-- 全連接
SELECT a.*, b.col FROM a FULL JOIN b ON a.id=b.a_id;
DECLARE @start INT=11, @end INT=20;
SELECT TOP (@end-@start+1) * FROM (
SELECT TOP @end * FROM T ORDER BY id DESC
) AS t1 ORDER BY id ASC;
注意:TOP 後不可直接跟變量,需動態 SQL 或參數化。
| 場景 | SQL 模式 |
|---|---|
| 前 10 行 | SELECT TOP 10 * FROM t WHERE ... |
| 每組最大值行 | SELECT * FROM t ta WHERE val=(SELECT MAX(val) FROM t tb WHERE tb.grp=ta.grp) |
| 隨機 10 行 | SELECT TOP 10 * FROM t ORDER BY NEWID() |
| 刪除重複(保留最大 ID) | DELETE FROM t WHERE id NOT IN (SELECT MAX(id) FROM t GROUP BY col1,col2...) |
| 列出所有用戶表 | SELECT name FROM sysobjects WHERE type='U' |
| 列出表所有列 | SELECT name FROM syscolumns WHERE id=OBJECT_ID('t') |
| 行轉列(CASE 聚合) | SELECT type, SUM(CASE vender WHEN 'A' THEN pcs ELSE 0 END) AS A_pcs FROM t GROUP BY type |
| 清空表(保留結構) | TRUNCATE TABLE t |