掌握 SQL Server 的核心語法,是資料庫開發與管理的基本功。本文系統整理 SQL 三大語言分類(DDL、DML、DCL)的常用指令,涵蓋資料庫/資料表建立、備份、索引、視圖、聯結查詢、集合運算等實務操作,並附上可直接執行的語法範例,適合開發人員隨時查閱。
| 分類 | 全稱 | 常用指令 |
|---|---|---|
| DDL | Data Definition Language | CREATE, ALTER, DROP, DECLARE |
| DML | Data Manipulation Language | SELECT, DELETE, UPDATE, INSERT |
| DCL | Data Control Language | GRANT, REVOKE, COMMIT, ROLLBACK |
-- 建立資料庫
CREATE DATABASE database_name;
-- 刪除資料庫
DROP DATABASE dbname;
-- 備份資料庫(建立備份裝置並執行備份)
USE master;
EXEC sp_addumpdevice 'disk', 'testBack', 'C:\backup\MyDB.bak';
BACKUP DATABASE pubs TO testBack;
-- 建立新表
CREATE TABLE tabname (
col1 type1 [NOT NULL] [PRIMARY KEY],
col2 type2 [NOT NULL], ...
);
-- 依現有表結構建立新表
CREATE TABLE tab_new LIKE tab_old; -- 僅複製結構
CREATE TABLE tab_new AS SELECT col1, col2 FROM tab_old WHERE 1=0; -- 複製結構不含資料
-- 刪除資料表
DROP TABLE tabname;
-- 新增欄位
ALTER TABLE tabname ADD COLUMN col type;
-- 設定/移除主鍵
ALTER TABLE tabname ADD PRIMARY KEY (col);
ALTER TABLE tabname DROP PRIMARY KEY;
-- 索引操作
CREATE [UNIQUE] INDEX idxname ON tabname(col...);
DROP INDEX idxname;
-- 視圖操作
CREATE VIEW viewname AS SELECT ...;
DROP VIEW viewname;
-- 基礎查詢
SELECT * FROM table1 WHERE condition;
INSERT INTO table1(field1,field2) VALUES(value1,value2);
DELETE FROM table1 WHERE condition;
UPDATE table1 SET field1=value1 WHERE condition;
SELECT * FROM table1 WHERE field1 LIKE '%value1%';
SELECT * FROM table1 ORDER BY field1, field2 [DESC];
-- 彙總統計
SELECT COUNT(*) AS totalcount FROM table1;
SELECT SUM(field1) AS sumvalue FROM table1;
SELECT AVG(field1) AS avgvalue FROM table1;
SELECT MAX(field1) AS maxvalue FROM table1;
SELECT MIN(field1) AS minvalue FROM table1;
UNION ALL 保留重複。EXCEPT ALL 保留重複。INTERSECT ALL 保留重複。-- LEFT OUTER JOIN:左表所有列 + 右表匹配列
SELECT a.a, a.b, a.c, b.c, b.d, b.f
FROM a LEFT OUTER JOIN b ON a.a = b.c;
-- RIGHT OUTER JOIN:右表所有列 + 左表匹配列
SELECT ... FROM a RIGHT OUTER JOIN b ON a.a = b.c;
-- FULL OUTER JOIN:兩表所有列
SELECT ... FROM a FULL OUTER JOIN b ON a.a = b.c;
-- 僅複製結構
SELECT * INTO b FROM a WHERE 1<>1;
-- 或
SELECT TOP 0 * INTO b FROM a;
-- 複製資料
INSERT INTO b(a, b, c) SELECT d, e, f FROM a;
-- 跨資料庫複製(Access/舊版語法)
INSERT INTO b(a, b, c) SELECT d, e, f FROM b IN '完整路徑\data.mdb' WHERE 條件;
-- IN 子查詢
SELECT a,b,c FROM a WHERE a IN (SELECT d FROM b);
-- 衍生表(內聯檢視)
SELECT * FROM (SELECT a,b,c FROM a) T WHERE t.a > 1;
熟練這些語法,能大幅提升撰寫預存程序、ETL 腳本與效能調校的效率。建議收藏備查,並在測試環境實驗各指令行為差異。