語句分類總覽
| 類別 | 關鍵字 | 功能 |
| 數據操作 (DML) | SELECT | 檢索行列 |
| INSERT | 添加新行 |
| DELETE | 刪除行 |
| UPDATE | 更新數據 |
| 數據定義 (DDL) | CREATE TABLE | 創建表 |
| DROP TABLE | 刪除表 |
| ALTER TABLE | 修改表結構 |
| CREATE VIEW | 創建視圖 |
| DROP VIEW | 刪除視圖 |
| CREATE INDEX | 創建索引 |
| DROP INDEX | 刪除索引 |
| CREATE PROCEDURE | 創建存儲過程 |
| DROP PROCEDURE | 刪除存儲過程 |
| CREATE TRIGGER | 創建觸發器 |
| 數據控制 (DCL) | GRANT | 授予權限 |
| DENY | 拒絕權限 |
| REVOKE | 撤銷權限 |
| 事務控制 (TCL) | COMMIT | 提交事務 |
| ROLLBACK | 回滾事務 |
| SET TRANSACTION | 定義事務特性 |
| 過程化 SQL | DECLARE | 聲明游標 |
| EXPLAIN | 描述訪問計劃 |
| OPEN | 打開游標 |
| FETCH | 提取行 |
| CLOSE | 關閉游標 |
| PREPARE | 準備動態 SQL |
| EXECUTE | 執行動態 SQL |
| DESCRIBE | 描述準備語句 |
變量聲明
-- 局部變量
DECLARE @id CHAR(10)
SET @id = '10010001' -- 或 SELECT @id = '10010001'
-- 全局變量:以 @@ 開頭(如 @@ERROR, @@IDENTITY, @@ROWCOUNT)
流程控制
IF ... ELSE
DECLARE @x INT, @y INT, @z INT
SELECT @x = 1, @y = 2, @z = 3
IF @x > @y
PRINT 'x > y'
ELSE IF @y > @z
PRINT 'y > z'
ELSE
PRINT 'z >= y'
CASE 表達式
USE pangu
UPDATE employee
SET e_wage = CASE
WHEN job_level = '1' THEN e_wage * 1.08
WHEN job_level = '2' THEN e_wage * 1.07
WHEN job_level = '3' THEN e_wage * 1.06
ELSE e_wage * 1.05
END
WHILE 循環 + BREAK/CONTINUE
DECLARE @x INT, @y INT, @c INT
SELECT @x = 1, @y = 1
WHILE @x < 3
BEGIN
PRINT @x
WHILE @y < 3
BEGIN
SELECT @c = 100*@x + @y
PRINT @c
SELECT @y = @y + 1
END
SELECT @x = @x + 1
SELECT @y = 1
END
WAITFOR 延遲執行
WAITFOR DELAY '01:02:03' -- 等待 1時2分3秒
SELECT * FROM employee
WAITFOR TIME '23:08:00' -- 等到 23:08
SELECT * FROM employee
核心 DML 詳解
SELECT
SELECT *|列名 FROM 表名 WHERE 條件
-- 條件運算符:=, <>, >, <, >=, <=
-- LIKE 通配符:%, _, [範圍], [^排除範圍]
-- 邏輯:AND, OR, NOT
-- 范圍:BETWEEN ... AND ...
-- 列表:IN (值1, 值2...)
-- 排序:ORDER BY 列名 DESC|ASC 或列號
-- 子查詢:外層 WHERE 用 IN 防多行
-- 去重:DISTINCT
-- 計算列:SELECT 列, "別名" = 表達式
-- 分組:GROUP BY 列 HAVING 條件
-- 外連接:左連 *= 右連 =*
UNION 合併結果集
SELECT 列 FROM 表1
UNION [ALL] -- ALL 保留重複行
SELECT 列 FROM 表2
INSERT
INSERT INTO 表 (列1, 列2) VALUES ('值1', '值2')
INSERT INTO 表 (列1, 列2) SELECT 列1, 列2 FROM 表2
UPDATE
UPDATE 表 SET 列1 = '值1' [WHERE 條件]
-- 可用 DEFAULT, NULL, 表達式 (列1 = 列2 + 4)
DELETE / TRUNCATE / DROP
DELETE FROM 表 WHERE 條件
TRUNCATE TABLE 表 -- 刪全表數據,保留結構,速度快、不記錄日誌
DROP TABLE 表 -- 刪表結構與數據