SQL 指令分類
| 類別 | 全稱 | 常用指令 | 用途 |
| DDL | Data Definition Language | CREATE, ALTER, DROP, TRUNCATE | 定義資料庫物件結構 |
| DML | Data Manipulation Language | SELECT, INSERT, UPDATE, DELETE | 操作資料內容 |
| DCL | Data Control Language | GRANT, REVOKE, COMMIT, ROLLBACK | 權限控制與交易管理 |
核心 DDL 操作
資料庫與資料表
-- 建立/刪除資料庫
CREATE DATABASE MyDB;
DROP DATABASE MyDB;
-- 建立資料表(含主鍵、非空、預設值)
CREATE TABLE Users (
UserID INT PRIMARY KEY IDENTITY,
UserName NVARCHAR(50) NOT NULL,
Email NVARCHAR(100) UNIQUE,
RegDate DATETIME DEFAULT GETDATE()
);
-- 修改結構
ALTER TABLE Users ADD Phone NVARCHAR(20);
ALTER TABLE Users ALTER COLUMN Email NVARCHAR(150); -- 擴充長度
ALTER TABLE Users DROP COLUMN Phone;
索引與檢視
CREATE UNIQUE INDEX IX_Users_Email ON Users(Email);
DROP INDEX IX_Users_Email ON Users;
CREATE VIEW V_ActiveUsers AS
SELECT UserID, UserName FROM Users WHERE IsActive = 1;
核心 DML 查詢與修改
基本查詢
SELECT * FROM Users WHERE UserName LIKE '張%';
SELECT UserName, Email FROM Users ORDER BY RegDate DESC;
SELECT COUNT(*) AS Total FROM Users;
分頁查詢 (SQL Server 2012+)
SELECT * FROM Users
ORDER BY UserID
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY; -- 第 3 頁,每頁 10 筆
集合運算
SELECT UserID FROM Users_2023
UNION -- 去重合併
SELECT UserID FROM Users_2024;
SELECT UserID FROM Users_2023
EXCEPT -- 差集
SELECT UserID FROM Users_2024;
SELECT UserID FROM Users_2023
INTERSECT -- 交集
SELECT UserID FROM Users_2024;
進階實用技巧
- 隨機抽樣:
SELECT TOP 10 * FROM Users ORDER BY NEWID()
- 刪除重複資料:
DELETE FROM Users WHERE UserID NOT IN (SELECT MAX(UserID) FROM Users GROUP BY Email)
- 動態字串截斷顯示:
CASE WHEN LEN(Title) > 20 THEN LEFT(Title,20)+'...' ELSE Title END
- 交易控制:
BEGIN TRAN; ... COMMIT/ROLLBACK;
效能小撇步
- 避免
SELECT *,明確列出欄位。
- WHERE 條件欄位建立索引,但低基數欄位(如性別)不宜建索引。
- 大量匯入用
BULK INSERT 或 bcp,而非逐筆 INSERT。
- 善用
SET STATISTICS IO, TIME ON 分析查詢成本。