1. 控制流关键字
控制流关键字用于控制 SQL 脚本的执行逻辑,包括条件判断和循环等操作。
1.1 IF 和 ELSE
- 用于条件判断并执行不同的分支。
1 2 3 4 | IF EXISTS ( SELECT 1 FROM Users WHERE UserID = 1) PRINT 'User exists' ELSE PRINT 'User does not exist' |
1.2 IIF
- 三元操作符,类似于
CASE WHEN
,用于简单的条件判断。
1 2 | SELECT IIF(Age >= 18, 'Adult' , 'Minor' ) AS AgeGroup FROM Users |
1.3 CASE
- 用于多条件分支选择。
1 2 3 4 5 6 | SELECT CASE WHEN Age >= 18 THEN 'Adult' ELSE 'Minor' END AS AgeGroup FROM Users |
1.4 BEGIN 和 END
- 用于定义一个逻辑代码块。
1 2 3 4 | BEGIN PRINT 'Start of block' SELECT * FROM Users END |
1.5 WHILE
- 用于循环操作。
1 2 | DECLARE @Counter INT = 0 WHILE @Counter |
2. 数据操作关键字
这些关键字主要用于对数据进行增删改查操作。
2.1 SELECT
- 用于查询数据。
1 | SELECT * FROM Users |
2.2 INSERT
- 用于插入数据。
1 2 | INSERT INTO Users (UserID, UserName) VALUES (1, 'John' ) |
2.3 UPDATE
- 用于更新数据。
1 | UPDATE Users SET UserName = 'Jane' WHERE UserID = 1 |
2.4 DELETE
- 用于删除数据。
1 | DELETE FROM Users WHERE UserID = 1 |
2.5 MERGE
- 用于合并数据(插入、更新或删除)。
1 2 3 4 5 6 7 8 9 | MERGE INTO TargetTable AS Target USING SourceTable AS Source ON Target.ID = Source.ID WHEN MATCHED THEN UPDATE SET Target. Name = Source. Name WHEN NOT MATCHED BY TARGET THEN INSERT (ID, Name ) VALUES (Source.ID, Source. Name ) WHEN NOT MATCHED BY SOURCE THEN DELETE ; |
3. 数据处理函数
SQL Server 提供了丰富的内置函数,用于处理数据。
3.1 字符串函数
-
RTRIM
和LTRIM
: 去除字符串右侧或左侧的空格。
1 | SELECT RTRIM( 'Hello ' ) AS Trimmed |
-
STUFF
: 替换字符串中指定位置的子字符串。
1 | SELECT STUFF( 'abcdef' , 2, 3, '123' ) AS Result -- 输出: a123ef |
-
LEN
: 返回字符串的长度。
1 | SELECT LEN( 'Hello' ) AS StringLength |
3.2 数学函数
-
ABS
: 返回绝对值。 -
ROUND
: 四舍五入。 -
POWER
: 计算幂次方。
1 | SELECT POWER(2, 3) AS Result -- 输出: 8 |
3.3 日期函数
-
GETDATE
: 返回当前系统时间。 -
DATEADD
: 在日期上加上指定的时间间隔。
1 | SELECT DATEADD( DAY , 1, '2024-01-01' ) AS NextDay |
-
DATEDIFF
: 计算两个日期之间的差异。
1 | SELECT DATEDIFF( DAY , '2024-01-01' , '2024-01-10' ) AS DaysDifference |
4. 窗口函数关键字
窗口函数用于在查询中执行分组或排序相关的操作。
4.1 OVER
- 配合聚合函数使用,为每一行提供额外的计算结果。
1 2 | SELECT Name , Salary, RANK() OVER ( ORDER BY Salary DESC ) AS Rank FROM Employees |
4.2 PARTITION BY
- 用于分组,配合
OVER
使用。
1 2 | SELECT Name , Department, RANK() OVER (PARTITION BY Department ORDER BY Salary DESC ) AS Rank FROM Employees |
5. 临时表关键字
5.1 TEMPDB
- 系统数据库,用于存储临时表和对象。
5.2 # 和 ##
-
#
: 创建本地临时表。 -
##
: 创建全局临时表。
1 2 3 | CREATE TABLE #TempTable (ID INT , Name NVARCHAR(50)) INSERT INTO #TempTable VALUES (1, 'John' ) SELECT * FROM #TempTable |
6. 事务管理关键字
用于管理数据操作的事务性。
6.1 BEGIN TRAN 和 COMMIT
- 用于开启和提交事务。
1 2 3 | BEGIN TRAN UPDATE Users SET Name = 'NewName' WHERE ID = 1 COMMIT |
6.2 ROLLBACK
- 用于回滚事务。
1 2 3 | BEGIN TRAN UPDATE Users SET Name = 'NewName' WHERE ID = 1 ROLLBACK |
7. 安全与权限管理关键字
7.1 GRANT 和 REVOKE
- 用于分配和撤销权限。
1 2 | GRANT SELECT ON Users TO UserRole REVOKE SELECT ON Users FROM UserRole |
7.2 DENY
- 用于显式禁止权限。
1 | DENY SELECT ON Users TO UserRole |
8. 高级关键字
8.1 WITH (NOLOCK)
- 用于减少锁的开销,允许读取未提交的数据。
1 | SELECT * FROM Users WITH (NOLOCK) |
8.2 FOR XML PATH
- 用于将结果集转换为 XML 格式。
1 | SELECT Name FROM Users FOR XML PATH( 'User' ) |
8.3 CROSS APPLY 和 OUTER APPLY
- 用于将表值函数应用到每一行数据。
1 | SELECT * FROM Users u CROSS APPLY dbo.GetDetails(u.ID) |
总结
SQL Server 的关键字涵盖了数据操作、查询优化、数据处理、事务管理等方方面面。在实际开发中,灵活运用这些关键字和函数,可以高效地完成各种复杂的数据操作。
建议
- 多用关键字组合优化查询。
- 注意
WITH (NOLOCK)
和事务的使用,避免不一致的数据问题。 - 使用窗口函数简化复杂的分组计算。
以上就是SQL Server常用关键字与功能详解的详细内容,更多关于SQL Server关键字与功能的资料请关注IT俱乐部其它相关文章!