Mysql基础知识点汇总

2019-01-04 20:53:14王旭

1.第一种做等值判断的case..end

case 字段或者表达式
when .值..then .自定义值
when .值..then .自定义值
.....
 else 如果不满足上面所有的when就满足这个else
end
--显示具体班级的名称
select StudentNo,StudentName,
case ClassId  --如果case后面接有表达式或者字段,那么这种结构就只能做等值判断,真的相当于switch..case
  when 1 then '一班'
  when 2 then '2班'
  when 3 then '3班'
  when null  then 'aa' --不能判断null值
  else  '搞不清白'
end,
sex
 from Student
--2.做范围判断,相当于if..else,它可以做null值判断
--case  --如果没有表达式或者字段就可实现范围判断
-- when  表达式  then 值   --不要求表达式对同一字段进行判断
-- when  表达式  then 值 
-- .....
--else  其它情况 
--end
select StudentNo,StudentName,
case
 when BornDate>'2000-1-1' then '小屁孩'
 when BornDate>'1990-1-1' then '小青年'
 when BornDate>'1980-1-1' then '青年' 
 --when Sex='女'  then '是女的'
 when BornDate is null then '出生不详'
 else  '中年'
end
 from Student

--百分制转换为素质教育  90 -A   80--B  70 --C  60 --D  <60 E  NULL--没有参加考试
select StudentNo,SubjectId,
case
    when StudentResult>=90 then 'A'
    when StudentResult>=80 then 'B'
    when StudentResult>=70 then 'C'
    when StudentResult>=60 then 'D'
    when StudentResult is null then '没有参加考试'
    else 'E'
end 成绩,
ExamDate
 from Result

13.IF ELSE语法

1.没有{},使用begin..end.如果后面只有一句,可以不使用begin..end包含
2.没有bool值,只能使用关系运算符表达式
3.也可以嵌套和多重
4.if后面的()可以省略

declare @subjectname nvarchar(50)='office' --科目名称
declare @subjectId int=(select Subjectid from Subject where SubjectName=@subjectname) --科目ID
declare @avg int --平均分
set @avg=(select AVG(StudentResult) from Result where SubjectId=@subjectId and StudentResult is not null) --获取平均分
print @avg
if @avg>=60
 begin
   print '成绩不错,输出前三名:'
   select top 3 * from Result where SubjectId=@subjectId order by StudentResult desc
 end
else
  begin
    print '成绩不好,输出后三名:'
    select top 3 * from Result where SubjectId=@subjectId order by StudentResult