第三章SQL编程--经典案例和上级题
2017-01-09 14:38
387 查看
//if-lse经典案例 --统计并显示2013-08-09 的oop考试平均分 --如果平均分在70以上,显示“考试成绩优秀”,并显示前三名学生的考试信息 --如果在70分以下,显示“考试成绩较差”,并显示后三名学生的考试信息 --01.定义一个变量,保存平均分 select * from Result --查编号 declare @subid int select @subid=SubjectId from Subject where subjectname='oop' --查询平均分 declare @avg int select @avg=avg(Studentresult)from result where examdate>='2013-08-09' and examdate<'2013-08-10' and SubjectId=@subid --前三名 if(@avg>=70) begin print '成绩优秀' select top 3 * from Result where examdate>='2013-08-09' and ExamDate<'2013-08-10' and SubjectId=@subid order by StudentResult desc end if(@avg<70) begin print '考试成绩较差' select top 3 * from Result where examdate>='2013-08-09' and ExamDate<'2013-08-10' and SubjectId=@subid order by StudentResult end
//while经典案例 --科目名为oop的id declare @subid int select @subid=SubjectId from subject where SubjectName='oop' print @subid --科目名为oop的最近考试时间 declare @maxdate datetime select @maxdate=MAX(examdate) from Result where SubjectId=@subid --符合条件的学生信息 select * from Result where SubjectId=@subid and ExamDate=@maxdate --分数小于70分的人数 declare @sum int select @sum= COUNT(StudentNo)from Result where StudentResult<70 and SubjectId=@subid and ExamDate=@maxdate --当分数小于70分的人数大于0,每个人加2,95分以上不加,直至每个人的分数达到平均分 while(@sum>0) begin --更新分数 update result set studentresult+=2 where subjectid=@subid and examdate=@maxdate and studentresult<95 --重新给分数小于70分的人数赋值 select @sum=COUNT(Studentno) from Result where subjectid=@subid and examdate=@maxdate and studentresult<70 end
//第三章上机题 --上机1 declare @name nvarchar(255) set @name='★' declare @int int set @int=1 while(@int<6) begin print @name set @name+='★' set @int+=1 end go --上机2 select studentno as '学号',StudentName as '姓名',FLOOR(DATEDIFF(dy,birthday,getdate())/365) as '年龄' from dbo.Student where studentno='23225' declare @yy int select @yy=DATEPART(YY,birthday) from student where studentno='23225' select * from student where DATEPART(YY,birthday)=@yy+1 or DATEPART(YY,birthday)=@yy-1 go --上机3 select top 1 studentname,studentresult from student,result,subject where student.studentno='23219' and subject.subjectid=2 declare @result int select @result=studentresult from student,result,subject where student.studentno='23219' and subject.subjectid=2 if(@result>85) print '优秀' else if(@result>70) print '良好' else if(@result>60) print '中等' else print '差' --上机4 --科目名为oop的id declare @subid int select @subid=SubjectId from subject where SubjectName='oop' print @subid --科目名为oop的最近考试时间 declare @maxdate datetime select @maxdate=MAX(examdate) from Result where SubjectId=@subid --根据课程oop最近一次考试,显示每个学生的等级 select 学号=StudentNo,课程编号=SubjectId, 成绩=StudentResult, 等级=case when StudentResult>90 then '★★★★' when StudentResult between 80 and 89 then '★★★' when StudentResult between 70 and 79 then '★★' when StudentResult between 60 and 69 then '★' else '你要努力了' end from Result where subjectid=@subid and examdate=@maxdate --分数小于70分的人数 declare @sum int select @sum= COUNT(StudentNo)from Result where StudentResult<70 and SubjectId=@subid and ExamDate=@maxdate --当分数小于70分的人数大于0,每个人加2,直至每个人的分数达到平均分,若成绩大于100分,则按100分计算 while(@sum>0) begin --更新分数 update result set studentresult+=2 where subjectid=@subid and examdate=@maxdate update result set studentresult=100 where subjectid=@subid and examdate=@maxdate and studentresult>100 --重新给分数小于70分的人数赋值 select @sum=COUNT(Studentno) from Result where subjectid=@subid and examdate=@maxdate and studentresult<70 end
//SQL面试题 --创建表 use MySchool create table tmp ( rp varchar(10), shengfu nchar(1) ) --插入数据 insert into tmp values('2005-5-9','胜') insert into tmp values('2005-5-9','胜') insert into tmp values('2005-5-9','负') insert into tmp values('2005-5-9','负') insert into tmp values('2005-5-10','胜') insert into tmp values('2005-5-10','负') insert into tmp values('2005-5-10','负') select rp as 日期, SUM( case when shengfu='胜' then 1 else 0 end ) as 胜, SUM( case when shengfu='负' then 1 else 0 end ) as 负 from tmp group by rp order by rp desc
//SQL语句打印直角三角形 ---单层循环 declare @str nvarchar(32) set @str='☆' declare @num int set @num=1 while(@num<5) begin print @str set @str+='☆' set @num+=1 end --双层循环 declare @number int set @number=1 declare @sum int set @sum=1 declare @stri nvarchar(32) set @stri='' while(@number<=5) begin while(@sum<@number) begin set @stri+='☆' set @sum+=1 end print @stri set @number+=1 end
相关文章推荐
- SQL 编程 -- 打印直角三角形, while经典案例 ,case end 经典案例
- SQL Server 2008编程入门经典笔记(第三章:T-SQL基本语句)
- 帮盖尔优化SQL-----子查询优化的经典案例
- SQL经典案例
- SQL纵向变成横向,横向变成纵向(经典案例添加自己的想法)
- 四个经典的SQL编程问题
- QThread多线程编程经典案例分析
- pl/sql 编程入门经典教程之触发器篇
- oracle中pl/sql编程案例
- 第三章 T-SQL 编程
- 经典SQL学习笔记 (七) - pl/sql编程一
- SQL Server BI的几个经典案例:Project Real等
- 因为涉及到泄密问题,个人博客上SQL优化部分的很多经典案例被删除
- 因为涉及到泄密问题,个人博客上SQL优化部分的很多经典案例被删除
- java学习之路4-java编程经典第三章习题及答案
- 帮盖尔优化SQL-----子查询优化的经典案例
- SQL 行列转换--经典案例
- 经典SQL案例
- 领悟Java编程思想:经典案例源代码最佳实践
- 经典SQL学习笔记 (八) - pl/sql编程二