本文系統整理資料庫/資料表生命週期管理、基礎查詢、進階聯 JOIN、集合運算、分組統計、中繼資料查詢、系統存儲過程等高頻操作,所有範例附帶可直接執行的測試資料建立腳本。
-- 建立
CREATE DATABASE MyDB;
-- 備份 (完整備份)
USE master;
EXEC sp_addumpdevice 'disk', 'MyDB_bak', 'D:\Backup\MyDB.bak';
BACKUP DATABASE MyDB TO MyDB_bak;
-- 刪除
DROP DATABASE MyDB;
-- 建表 (含主鍵、非空、預設值)
CREATE TABLE Products (
Id INT IDENTITY(1,1) PRIMARY KEY,
Name NVARCHAR(50) NOT NULL,
Qty INT DEFAULT 0,
Price DECIMAL(10,2),
CreatedAt DATETIME2 DEFAULT SYSDATETIME()
);
-- 新增欄位
ALTER TABLE Products ADD Category NVARCHAR(20);
-- 刪除欄位
ALTER TABLE Products DROP COLUMN Category;
-- 新增主鍵 (表已有資料需確保唯一非空)
ALTER TABLE Products ADD CONSTRAINT PK_Products PRIMARY KEY (Id);
-- 刪除主鍵
ALTER TABLE Products DROP CONSTRAINT PK_Products;
-- 索引
CREATE UNIQUE INDEX IX_Products_Name ON Products(Name);
DROP INDEX IX_Products_Name ON Products;
-- 視圖
CREATE VIEW V_Expensive AS SELECT * FROM Products WHERE Price > 1000;
DROP VIEW V_Expensive;
-- 新增
INSERT INTO Products (Name, Qty, Price) VALUES ('筆記型電腦', 10, 25000);
-- 修改
UPDATE Products SET Price = 24000 WHERE Name = '筆記型電腦';
-- 刪除
DELETE FROM Products WHERE Qty = 0;
-- 清空表 (DDL、極快、重置 IDENTITY)
TRUNCATE TABLE Products;
-- 查詢
SELECT * FROM Products;
SELECT Name, Price FROM Products WHERE Price > 1000;
SELECT Name AS 產品, Price AS 價格 FROM Products;
SELECT TOP 10 * FROM Products ORDER BY Price DESC;
SELECT COUNT(*) AS 總筆數, SUM(Qty) AS 總庫存, AVG(Price) AS 平均價, MAX(Price) 最高價, MIN(Price) 最低價
FROM Products;
-- 分組統計
SELECT Category, COUNT(*) AS 種類數, AVG(Price) AS 平均價
FROM Products
GROUP BY Category
HAVING COUNT(*) > 5; -- 分組後過濾
-- 測試資料
DECLARE @a TABLE (id INT); INSERT @a VALUES (1),(1),(2),(3),(NULL);
DECLARE @b TABLE (id INT); INSERT @b VALUES (1),(2),(2),(4),(NULL);
-- UNION: 合併去重
SELECT * FROM @a UNION SELECT * FROM @b; -- 1,2,3,4,NULL
-- UNION ALL: 合併不去重
SELECT * FROM @a UNION ALL SELECT * FROM @b; -- 1,1,2,3,NULL,1,2,2,4,NULL
-- EXCEPT: 差集 (去重)
SELECT * FROM @a EXCEPT SELECT * FROM @b; -- 3
-- INTERSECT: 交集 (去重)
SELECT * FROM @a INTERSECT SELECT * FROM @b; -- 1,2,NULL
注意:SQL Server **不支援** EXCEPT ALL、INTERSECT ALL。
-- 測試資料同前
-- INNER JOIN (預設)
SELECT * FROM @a a JOIN @b b ON a.id = b.id; -- 1,1,2,2,NULL
-- LEFT JOIN
SELECT * FROM @a a LEFT JOIN @b b ON a.id = b.id; -- 保留 a 全部
-- RIGHT JOIN
SELECT * FROM @a a RIGHT JOIN @b b ON a.id = b.id; -- 保留 b 全部
-- FULL JOIN
SELECT * FROM @a a FULL JOIN @b b ON a.id = b.id; -- 保留雙方全部
SELECT 清單中**非聚合欄位必須出現在 GROUP BY** 中。TEXT/NTEXT/IMAGE 分組 (已淘汰型別);MAX/MIN 可用於 VARCHAR(MAX)/VARBINARY(MAX)。GROUP BY ROLLUP/CUBE/GROUPING SETS 進階多維度小計。-- 分離 (需單一使用者模式)
EXEC sp_detach_db 'MyDB', 'true'; -- true = 更新統計資料
-- 附加 (需 .mdf + .ldf 完整路徑)
EXEC sp_attach_db @dbname = 'MyDB',
@filename1 = 'D:\Data\MyDB.mdf',
@filename2 = 'D:\Data\MyDB_log.ldf';
-- 重命名
EXEC sp_renamedb 'OldName', 'NewName';
EXEC sp_rename 'OldTable', 'NewTable'; -- 表
EXEC sp_rename 'Table.OldCol', 'NewCol', 'COLUMN'; -- 欄位
EXEC sp_rename 'IX_Old', 'IX_New', 'INDEX'; -- 索引
CREATE/BACKUP/DROP DATABASECREATE/ALTER TABLE + 約束語法CREATE/DROP INDEX/VIEWINSERT/UPDATE/DELETE/SELECT + TOP/ORDER BYCOUNT/SUM/AVG/MAX/MIN + GROUP BY/HAVINGUNION/EXCEPT/INTERSECT (去重)INNER/LEFT/RIGHT/FULLsp_detach_db/attach_db/renamedb/rename將此頁加入書籤,日常 T-SQL 開發 90% 語法皆可秒查秒用。