T-SQL 是 Microsoft 对 SQL 标准的扩展,是 SQL Server 数据库的核心语言,它不仅包含标准的 SQL 语句,还增加了变量、流程控制、函数、错误处理等强大的编程特性。

为了方便学习和理解,我将 T-SQL 命令按功能进行分类,并提供每个分类下的核心命令、语法示例和详细说明。
T-SQL 命令分类概览
- 数据查询语言 - 用于从数据库中检索数据。
- 数据操作语言 - 用于在表中插入、更新和删除数据。
- 数据定义语言 - 用于创建、修改和删除数据库对象(如表、视图、索引等)。
- 数据控制语言 - 用于控制数据库对象的访问权限。
- 事务控制语言 - 用于管理数据库事务。
- 流程控制语言 - 用于编写复杂的脚本和存储过程。
- 其他重要命令 - 如变量声明、输出等。
数据查询语言
这是最常用、最核心的命令。
| 命令 | 描述 | 语法示例 |
|---|---|---|
SELECT |
从数据库表中检索数据。 | SELECT column1, column2 FROM table_name WHERE condition; |
FROM |
指定要查询的表。 | SELECT * FROM Employees; |
WHERE |
根据指定条件过滤结果集。 | SELECT * FROM Employees WHERE Department = 'Sales'; |
JOIN |
根据相关列将两个或多个表的行结合起来。 | SELECT E.Name, D.DepartmentName FROM Employees E JOIN Departments D ON E.DeptID = D.ID; |
GROUP BY |
将结果集按一个或多个列进行分组,通常与聚合函数一起使用。 | SELECT Department, COUNT(*) AS EmployeeCount FROM Employees GROUP BY Department; |
HAVING |
对 GROUP BY 生成的组进行过滤,类似于 WHERE 但用于组。 |
SELECT Department, AVG(Salary) AS AvgSalary FROM Employees GROUP BY Department HAVING AVG(Salary) > 60000; |
ORDER BY |
对结果集进行升序 (ASC) 或降序 (DESC) 排序。 |
SELECT * FROM Employees ORDER BY HireDate DESC; |
UNION / UNION ALL |
合并两个或多个 SELECT 语句的结果集。UNION 会去除重复项,UNION ALL 不会。 |
SELECT City FROM Customers UNION SELECT City FROM Suppliers; |
DISTINCT |
返回唯一不同的值。 | SELECT DISTINCT City FROM Customers; |
TOP / OFFSET-FETCH |
限制返回的行数。TOP 是 SQL Server 特有的,OFFSET-FETCH 是标准 SQL,功能更强大。 |
SELECT TOP 5 * FROM Employees ORDER BY Salary DESC;SELECT * FROM Employees ORDER BY Salary OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY; |
数据操作语言
用于对表中的数据进行增、删、改操作。
| 命令 | 描述 | 语法示例 |
|---|---|---|
INSERT INTO |
向表中插入新的一行或多行数据。 | INSERT INTO Employees (ID, Name, Department) VALUES (1, 'John Doe', 'IT');INSERT INTO Employees (ID, Name, Department) VALUES (2, 'Jane Smith', 'HR'), (3, 'Mike Johnson', 'IT'); |
UPDATE |
更新表中已存在的数据。 | UPDATE Employees SET Salary = 65000 WHERE Name = 'John Doe'; |
DELETE FROM |
从表中删除一行或多行数据。 | DELETE FROM Employees WHERE Name = 'John Doe'; |
重要提示:
UPDATE和DELETE操作前,强烈建议先使用SELECT语句检查WHERE条件是否正确,以免误操作。(图片来源网络,侵删)-- 先检查 SELECT * FROM Employees WHERE Name = 'John Doe'; -- 确认无误后,再执行 -- DELETE FROM Employees WHERE Name = 'John Doe';
数据定义语言
用于定义和管理数据库的结构。
| 命令 | 描述 | 语法示例 |
|---|---|---|
CREATE |
创建数据库或数据库对象。 | CREATE TABLE Employees (ID INT PRIMARY KEY, Name NVARCHAR(100), Salary DECIMAL(18, 2));CREATE PROCEDURE usp_GetEmployees AS ... |
ALTER |
修改现有数据库对象的结构。 | ALTER TABLE Employees ADD HireDate DATE;ALTER TABLE Employees ALTER COLUMN Salary DECIMAL(18, 0); |
DROP |
删除数据库或数据库对象。 | DROP TABLE Employees;DROP PROCEDURE usp_GetEmployees; |
TRUNCATE TABLE |
删除表中的所有行,但保留表结构,比 DELETE 更快,且不触发触发器,不可回滚。 |
TRUNCATE TABLE LogTable; |
RENAME |
重命名表(SQL Server 中使用 sp_rename 存储过程)。 |
EXEC sp_rename 'Employees', 'Staff'; |
数据控制语言
用于控制用户对数据库对象的访问权限。
| 命令 | 描述 | 语法示例 |
|---|---|---|
GRANT |
授予用户或角色特定的权限。 | GRANT SELECT, INSERT ON Employees TO User_A; |
REVOKE |
撤销之前授予的权限。 | REVOKE INSERT ON Employees FROM User_A; |
DENY |
显式拒绝用户或角色获得某个权限,即使他们通过其他角色获得了该权限。 | DENY SELECT ON Employees TO User_B; |
事务控制语言
用于管理事务,确保数据的一致性。
| 命令 | 描述 | 语法示例 |
|---|---|---|
BEGIN TRANSACTION |
显式开始一个事务。 | BEGIN TRANSACTION; |
COMMIT TRANSACTION |
提交当前事务,将所有更改永久保存到数据库。 | COMMIT TRANSACTION; |
ROLLBACK TRANSACTION |
回滚当前事务,撤销自事务开始以来所做的所有更改。 | ROLLBACK TRANSACTION; |
SAVE TRANSACTION |
在事务中设置一个保存点,可以部分回滚。 | SAVE TRANSACTION MySavePoint;ROLLBACK TRANSACTION MySavePoint; |
流程控制语言
这些是 T-SQL 的编程特性,用于编写复杂的逻辑。

| 命令/关键字 | 描述 | 语法示例 |
|---|---|---|
BEGIN...END |
定义一个代码块,将多条语句组合在一起。 | IF @Salary > 100000 BEGIN ... END |
IF...ELSE |
条件判断,如果条件为真,执行 IF 后的代码;否则执行 ELSE 后的代码。 |
IF @Age >= 18 PRINT 'Adult'; ELSE PRINT 'Minor'; |
WHILE |
当条件为真时,重复执行一个代码块。 | WHILE @Counter < 10 BEGIN ... SET @Counter = @Counter + 1 END |
BREAK |
退出 WHILE 循环。 |
WHILE @Counter < 10 BEGIN IF @Counter = 5 BREAK; ... END |
CONTINUE |
跳过当前循环的剩余部分,直接进入下一次循环。 | WHILE @Counter < 10 BEGIN IF @Counter % 2 = 0 CONTINUE; ... END |
CASE |
实现多路分支,类似于其他编程语言中的 switch-case 或 if-else if。 |
SELECT Name, Salary, CASE WHEN Salary > 100000 THEN 'High' WHEN Salary > 50000 THEN 'Medium' ELSE 'Low' END AS SalaryLevel FROM Employees; |
TRY...CATCH |
错误处理机制。TRY 块中的代码如果出错,会立即跳转到 CATCH 块执行。 |
BEGIN TRY -- 可能出错的代码 END TRY BEGIN CATCH -- 错误处理代码 END CATCH |
其他重要命令
| 命令/关键字 | 描述 | 语法示例 |
|---|---|---|
DECLARE |
声明一个局部变量。 | DECLARE @EmployeeCount INT; |
SET / SELECT |
为变量赋值。SET 用于为单个变量赋值,SELECT 可以为多个变量赋值或从查询结果中赋值。 |
SET @EmployeeCount = 10;SELECT @EmployeeCount = COUNT(*) FROM Employees; |
PRINT |
将消息返回到客户端。 | PRINT 'Hello, World!'; |
RAISERROR / THROW |
抛出一个错误。THROW 是更现代、推荐的方式。 |
THROW 50000, 'An error occurred.', 1; |
EXEC / EXECUTE |
执行一个存储过程、标量值函数或字符串。 | EXEC usp_GetEmployee 1;EXEC('SELECT * FROM Employees'); |
T-SQL 是一个功能极其丰富的语言,掌握这些命令是使用 SQL Server 的基础,对于初学者,建议从 DML (SELECT, INSERT, UPDATE, DELETE) 和基本的 DDL (CREATE TABLE) 开始,然后逐步学习 JOINs、聚合函数 (GROUP BY, HAVING),最后再深入到 存储过程、事务 和 错误处理 等高级主题。
希望这份详细的列表能帮助你更好地理解和使用 T-SQL!

