1. 控制流关键字
控制流关键字用于控制 sql 脚本的执行逻辑,包括条件判断和循环等操作。
1.1 if 和 else
- 用于条件判断并执行不同的分支。
if exists (select 1 from users where userid = 1) print 'user exists' else print 'user does not exist'
1.2 iif
- 三元操作符,类似于
case when
,用于简单的条件判断。
select iif(age >= 18, 'adult', 'minor') as agegroup from users
1.3 case
- 用于多条件分支选择。
select case when age >= 18 then 'adult' else 'minor' end as agegroup from users
1.4 begin 和 end
- 用于定义一个逻辑代码块。
begin print 'start of block' select * from users end
1.5 while
- 用于循环操作。
declare @counter int = 0 while @counter < 5 begin print @counter set @counter = @counter + 1 end
2. 数据操作关键字
这些关键字主要用于对数据进行增删改查操作。
2.1 select
- 用于查询数据。
select * from users
2.2 insert
- 用于插入数据。
insert into users (userid, username) values (1, 'john')
2.3 update
- 用于更新数据。
update users set username = 'jane' where userid = 1
2.4 delete
- 用于删除数据。
delete from users where userid = 1
2.5 merge
- 用于合并数据(插入、更新或删除)。
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
: 去除字符串右侧或左侧的空格。
select rtrim('hello ') as trimmed
stuff
: 替换字符串中指定位置的子字符串。
select stuff('abcdef', 2, 3, '123') as result -- 输出: a123ef
len
: 返回字符串的长度。
select len('hello') as stringlength
3.2 数学函数
abs
: 返回绝对值。round
: 四舍五入。power
: 计算幂次方。
select power(2, 3) as result -- 输出: 8
3.3 日期函数
getdate
: 返回当前系统时间。dateadd
: 在日期上加上指定的时间间隔。
select dateadd(day, 1, '2024-01-01') as nextday
datediff
: 计算两个日期之间的差异。
select datediff(day, '2024-01-01', '2024-01-10') as daysdifference
4. 窗口函数关键字
窗口函数用于在查询中执行分组或排序相关的操作。
4.1 over
- 配合聚合函数使用,为每一行提供额外的计算结果。
select name, salary, rank() over (order by salary desc) as rank from employees
4.2 partition by
- 用于分组,配合
over
使用。
select name, department, rank() over (partition by department order by salary desc) as rank from employees
5. 临时表关键字
5.1 tempdb
- 系统数据库,用于存储临时表和对象。
5.2 # 和 ##
#
: 创建本地临时表。##
: 创建全局临时表。
create table #temptable (id int, name nvarchar(50)) insert into #temptable values (1, 'john') select * from #temptable
6. 事务管理关键字
用于管理数据操作的事务性。
6.1 begin tran 和 commit
- 用于开启和提交事务。
begin tran update users set name = 'newname' where id = 1 commit
6.2 rollback
- 用于回滚事务。
begin tran update users set name = 'newname' where id = 1 rollback
7. 安全与权限管理关键字
7.1 grant 和 revoke
- 用于分配和撤销权限。
grant select on users to userrole revoke select on users from userrole
7.2 deny
- 用于显式禁止权限。
deny select on users to userrole
8. 高级关键字
8.1 with (nolock)
- 用于减少锁的开销,允许读取未提交的数据。
select * from users with (nolock)
8.2 for xml path
- 用于将结果集转换为 xml 格式。
select name from users for xml path('user')
8.3 cross apply 和 outer apply
- 用于将表值函数应用到每一行数据。
select * from users u cross apply dbo.getdetails(u.id)
总结
sql server 的关键字涵盖了数据操作、查询优化、数据处理、事务管理等方方面面。在实际开发中,灵活运用这些关键字和函数,可以高效地完成各种复杂的数据操作。
建议
- 多用关键字组合优化查询。
- 注意
with (nolock)
和事务的使用,避免不一致的数据问题。 - 使用窗口函数简化复杂的分组计算。
以上就是sql server常用关键字与功能详解的详细内容,更多关于sql server关键字与功能的资料请关注代码网其它相关文章!
发表评论