1、case...end (具体的值)
case后面有值,相当于c#中的switch case
注意:case后必须有条件,并且when后面必须是值不能为条件。
-----------------case--end---语法结构---------------------
select name , --注意逗号
case level --case后跟条件
when 1 then '骨灰'
when 2 then '大虾'
when 3 then'菜鸟'
end as'头衔'
from [user]
2、case...end (范围)
case 后面无值,相当于c#中的if...else if...else....
注意:case后不根条件
------------------case---end--------------------------------
select studentId,
case
when english between 80 and 90 then '优'
when english between 60 and 79 then '良'
else '差'
end
from Score
------------------case---end--------------------------------
select studentId,
case
when english >=80 then '优'
when english >=60 then '良'
else '差'
end
from Score
-----------------------------------------------------
select *,
case
when english>=60 and math >=60 then '及格'
else '不及格'
end
from Score
3、if...eles
IF(条件表达式)
BEGIN --相当于C#里的{
语句1
……
END --相当于C#里的}
ELSE
BEGIN
语句1
……
END
--计算平均分数并输出,如果平均分数超过分输出成绩最高的三个学生的成绩,否则输出后三名的学生
declare @avg int --定义变量
select @avg= AVG(english) from Score --为变量赋值
select '平均成绩'+CONVERT(varchar,@avg) --打印变量的值
if @avg<60
begin
select '前三名'
select top 3 * from Score order by english desc
end
else
begin
select '后三名'
select top 3 * from Score order by english
end
4、while循环
WHILE(条件表达式)
BEGIN --相当于C#里的{
语句
……
BREAK
END --相当于C#里的}
--如果不及格的人超过半数(考试题出难了),则给每个人增加分
select * from Score
declare @conut int,@failcount int,@i int=0 --定义变量
select @conut =COUNT(*) from Score --统计总人数
select @failcount =COUNT(*) from Score where english<100 --统计未及格的人数
while (@failcount>@conut/2)
begin
update Score set english=english+1
select @failcount=COUNT(*) from Score where english<100
set @i=@i+1
end
select @i
update Score set english=100 where english >100
5、索引
使用索引能提高查询效率,但是索引也是占据空间的,而