变量
声明:declare @UserName nvarchar(50) 赋值1:set @UserName=N'杨':修改 赋值2:select @UserName=N'牛':修改 输出:print @UserNameselect @UserName select @UserName+N'中',这时@UserName仍然是‘杨’,这句代码执行后显示‘杨中’ 区别:赋值时,set比select更严谨些 变量是有作用域的
全局变量:@@*** 这些变量由系统维护,不需要我们管理,用于查看信息 @@version:查看版本信息 @@identity:查看当前的标识 @@servername:查看服务器名称 @@error:返回最后执行的一句代码的错误编号,如果没有出错返回0;如果被go中断,就不能用 @@rownumber:查看最后执行的一句代码的影响行数
------------------------------------------------------变量练习
declare @name nvarchar(10)='龌蹉' if(@name='好帅') begin print '原来是小杨' end else begin print '原来是小赵' end
case
在查询语句的select后面,可以进行选择判断的逻辑 语法1:判等 Case 列名 When … then … When … then … Else … End as 列别名 语法2:判不等 Case When 包含列名的逻辑表达式 then … When … then … else … End as 列别名
----------------------------------------------------第一个练习 如果 成绩>100 优 如果成绩>90 良
select 英语成绩= case when TSEnglish>100 then '优' when TSEnglish>90 then '良' when TSEnglish>80 then '中' when TSEnglish>70 then '及格' when TSEnglish is NULL then '缺考' else '不及格' end from TblScore
----------------------------------------------第二个练习 1 2 3
select *, 级别= ( case when level=1 then '骨灰' when level=2 then '大侠' when level =3 then '菜鸟' end ) from user5
over子句
开窗函数:几个行作为一个区,就被称为一个窗,能够进行按行划区的函数就是开窗函数 排名函数:rank() over(order by 列名 desc),比row_number()函数更适合用于排名 over与聚合函数一起使用,但不要和group by 一组使用,否则会报错 没有分组的时候,就认为是将整个查询结果分成了一组 select *,sum(销售数量) from myOrders会报错 改为:select *,sum(销售数量) over from myOrders则不会报错,并且在最后一列显示求和结果 例:求每个销售员的销量:select *,sum(销售数量) over(partition by 销售员) from myOrders
select 销售员, 销售总金额=SUM(销售数量*销售价格), 称号= ( case when SUM(销售数量*销售价格)>6000 then '金牌' when SUM(销售数量*销售价格)>5500 then '银牌' when SUM(销售数量*销售价格)>4500 then '铜牌' else '铁牌' end ) from MyOrders group by 销售员
选择语句
if 条件 begin ... end else begin ... end
declare @name nvarchar(10)='龌蹉' ------------------------声明一个变量
if(@name='好帅') begin print '原来是小杨' end else begin print '原来是小赵' end
--------------------------------------------------计算平均分数并输出,如果平均分数超过60分输出成绩最高的三个学生的成绩,否则输出后三名的学生
declare @avg int =0 set @avg=(select AVG(tMath) from TblScore) if(@avg>60) begin select top 3 * from TblScore order by tMath desc end else begin select top 3 * from TblScore order by tMath asc end
视图view
视图:就是一个select语句,写起来比较复杂,多次被使用,则可以将这个select语句存放到一个视图中 创建语法: create view 名称 as 查询语句 好处:使用方便,安全(看不到表的名称、结构等信息) 使用:主要用于查询,与查询表的语法一样 查看视图的代码:exec sp_helptext 视图名称 可以基于视图再创建视图 建议:不要在视图中使用order by子句 集合的结果集被当作一个集合使用,所以是不应该有顺序的 如果加入了top n则可以使用,这样返回的又是一个n项的无序集合,虽然看上去是有顺序的
--------------------------------------------创建视图
create view vw_ors as select 购买人, 总金额=SUM(销售数量*销售价格) from MyOrders group by 购买人--------------------------------------------使用视图,视图主要是为了查询,表怎么用视图就怎么用 select * from vw_ors