SQL 高级 第三章 SQL编程

来源:互联网 发布:ubuntu txt中文乱码 编辑:程序博客网 时间:2024/05/16 00:57
九九乘法表:DECLARE @i intDECLARE @j intDECLARE @str varchar(110)SET  @i=1WHILE  @i<10  BEGIN     SET  @j=1     SET @str=''     WHILE @j<=@i        BEGIN          SET @str= @str+CAST(@i AS varchar(1))+' x '+CAST(@j AS varchar(1))+'='+CAST(@i*@j AS varchar(2))+'  '          SET  @j=@j+1        END    print @str    SET  @i=@i+1  END罚款记录表:Print '罚款记录表情况如下:'Select RID ,BID ,PDate,Amount, 罚款类型=case                  When PType=1 then '损坏'                  When Ptype=2 then '延期'                  When Ptype=3 then  '丢失'End from Penalty图书归还记录:declare @count intdeclare @TDay datetimeset @TDay=DateAdd(dd,1,getDate()) --获取明天的日期select @count=count(*) from Borrow where willDate<@TDayIF(@count=0)    BEGIN       print '明天没有应归还的图书'    EndElseIF(@count<10)BEGIN  Update Borrow set WillDate=DateAdd(dd,2,WillDate) WHERE willDate<@TDayENDElse BEGIN print '还书总数量:'SELECT book.BName, reader.RName, borrow.LendDate  FROM Book as book,Reader as reader,Borrow as borrow WHERE book.BID=borrow.BID and reader.RID=borrow.RID and borrow.willDate<@TDayprint @countEnd统计 册数 和 总金额:DECLARE @count int,@totalMoney moneySELECT @count=sum(BCount) FROM bookSELECT @totalMoney=sum(BCount*Price) FROM bookprint  '现存数量'+convert(varchar(10),@count)print  '总金额'+convert(varchar(10),@totalMoney)IF @count<10000   print '现有图书不足一万本,还需要继续购置书籍' ELSE   print '现有图书在一万本以上,需要管理员加强图书管理'三角形: declare @i int declare @j int declare @str nvarchar(100) set @i=1 set @j=1 set @str='' while(@i<=5) begin   while(@j<=@i)   begin     set @str+='*'       set @j+=1   end   print @str   set @i+=1 end计算 姓名和年龄declare @year int --声明 年龄declare @date datetime --声明 出生日期declare @no varchar(10)--声明 学号set @no='23316' select studentname,FLOOR(DATEDIFF(DY,birthday,GETDATE())/365)  from Student where studentno=@no  --查询 学号为 23316 的 姓名和年龄 select @date=birthday from Student  where StudentNo=@no  SET @year = DATEPART(YY, @date)            select *  from Student where DATEPART(YY,birthday )= @year + 1 OR DATEPART(YY,birthday) = @year - 1
一,打印三角形01,一重循环 declare @i int declare @j int declare @str nvarchar(100) set @i=1 set @j=1 set @str='' while(@i<=5) begin   while(@j<=@i)   begin     set @str+='*'       set @j+=1   end   print @str   set @i+=1 end02,二重循环declare @strr  varchar(32)set @strr  ='*'declare @row intset @row=1 declare @col int        set @col=1    while(@row<=5)    begin       while(@col<=@row)begin         PRINT @strr  SET @strr  =@strr  +'*'SET @col=@col+1end SET @row=@row+1end二。面试题作业  行转列 --创建 tmp 表  并添加数据 create table tmp(riqi varchar(32),shengfu nchar(1)) select *  from tmp insert into tmp values('2015-05-09','胜') insert into tmp values('2015-05-09','胜') insert into tmp values('2015-05-09','负') insert into tmp values('2015-05-09','负') insert into tmp values('2015-05-10','胜') insert into tmp values('2015-05-10','负') insert into tmp values('2015-05-10','负') --行转列 select *from tmpselect riqi 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 riqi
--储存 字符串 类型declare @name nvarchar(32)set @name ='小雨吧'print @name--储存 浮点型 declare @Blance decimal(18,7)set @Blance=12.36print @Blance--储存 字符串型 declare @Brithday datetimeset @Brithday='1998-3-30'print @Brithday--最后一个T-SQL语句的 错误符号select @@ERROR --输出 计算机的名称select @@SERVERNAME--输出 自增列 最后一次插入的标示值select @@IDENTITY--cast  convert  转换declare @num int set @num=5print '值是:'+cast(@num as nvarchar(32))declare @numm int set @numm=6print '值是:'+convert(nvarchar(32),@numm)--if-elese 结构declare @age intset @age=30  if(@age=30)begin    print'库里'end  elsebegin    print '詹姆斯'end--public class student{--类中的内容都称为成员--public string name;--驼峰命名法 Camel  首字母小写,后续有含义的单词,首字母大写 成员变量。--帕斯卡命名法 Pascal 首字母大写,后续有含义的单词,首字母大写  类名--public void doHomeWork(){      --int age=10;  局部变量  --生命周期  呱呱坠地------dameover -- }     --public string Play(){          --rerurn name+"科比布莱恩特";     --}  --返回到了哪里???  --在方法体 调用的时候 被返回给了 接收的对象  --也就是说  想返回给谁 就返回给谁--}***********************************************************--练习:--统计并显示2013-08-09 的oop考试平均分--如果平均分在70分以上,显示“考试成绩优秀”,并显示前三名学生的考试信息--如果在以下,显示“考试成绩较差”,并显示后三名学生的考试信息 select * from result order by examdate  --00.求出oop课程对应的课程编号 declare @subid int  select @subid=SubjectId from Subject where subjectname='oop'   --01.查询平均分 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 else begin print '成绩较差' select from Result   where  examdate>='2013-08-09' and examdate <'2013-08-10' and subjectid=@subid   order by studentresult  end********************************************************一。case    when   then  when    thenend二。while循环   循环结构-- 一定不能出现 while(true)--100内偶数和 declare @sum int  declare @num int  set @sum=0 set @num=1 while(@num<=100) begin   if(@num%2=0)     begin   set @sum=@num+@sum end set @num=@num+1 end  print @sum三。GO指令四。--***********************************************************************--检查学生参加“oop”课最近一次考试是否有不及格(分及格)的学生。--如有,每人加分,高于分的学生不再加分,直至所有学生这次考试成绩均及格--code a little ,debug a little 编写一点点,调试一点点--01.找一个变量存储oop科目编号declare @subid int select @subid=subjectid from subjectwhere subjectname='oop'--02.找到一个变量,存储最近一次考试时间declare @maxdate datetime select @maxdate= max(examdate) from resultwhere subjectid=@subidselect * from resultwhere subjectid=@subid and  examdate=@maxdate--03.投影出符合条件的人数declare @sum intselect @sum=COUNT(Studentno) from Resultwhere subjectid=@subid and  examdate=@maxdateand studentresult<70while(@sum>0)begin   --每人+2分   update result set studentresult+=2   where subjectid=@subid and  examdate=@maxdate    and studentresult<95        select @sum=COUNT(Studentno) from Resultwhere subjectid=@subid and  examdate=@maxdateand studentresult<70end
上机练习一
0001使用变量打印直角三角形
DECLARE @tag nvarchar(1)  SET @tag = '★'PRINT @tagPRINT @tag + @tagPRINT @tag + @tag + @tagPRINT @tag + @tag + @tag + @tagPRINT @tag + @tag + @tag + @tag + @tagGO

上机二
DECLARE @NO int                                          -- 学号SET @NO = 3DECLARE @date datetime                             -- 出生日期DECLARE @year int                                       -- 出生年份-- 获得学号是20011的学生姓名和年龄SELECT StudentName 姓名,               FLOOR(DATEDIFF(DY, BornDate, GETDATE())/365) 年龄   FROM student  WHERE StudentNo=@NO-- 查询输出比学号是20011的学生大1岁和小1岁的学生信息SELECT  @date=BornDate FROM Student   -- 使用SELECT赋值  WHERE StudentNo=@NOSET @year = DATEPART(YY, @date)             SELECT *  FROM Student    WHERE DATEPART(YY,BornDate) = @year + 1                 OR DATEPART(YY,BornDate) = @year - 1GO
上机三
DECLARE @name nvarchar(50)      --姓名DECLARE @score decimal(5,2)       --分数SELECT TOP 1  @score=StudentResult,@name=stu.StudentName    FROM Result r   INNER JOIN Student stu ON r.StudentNo=stu.StudentNo   INNER JOIN Subject sub ON r.SubjectNo=sub.SubjectNo   WHERE r.StudentNo='20012' AND sub.SubjectName='Java Logic'   ORDER BY ExamDate DESCPRINT '学生姓名:' + @nameIF (@score > 85)  PRINT '考试等级:' + '优秀'ELSE IF (@score > 70)  PRINT '考试等级:' + '良好'ELSE IF (@score > 60)  PRINT '考试等级:' + '中等'ELSE  PRINT '考试等级:' + '差'

上机四
DECLARE @date datetime  --考试时间DECLARE @subNO int      --课程编号SELECT @subNO=SubjectNo FROM SubjectWHERE SubjectName='C# OOP'SELECT  @date=max(ExamDate) FROM Result WHERE SubjectNo=@subNOPRINT '加分前学生的考试成绩如下:'SELECT 学号=StudentNo,成绩等级=CASE   WHEN StudentResult BETWEEN 0 AND 59 THEN '你要努力了!!!' WHEN StudentResult BETWEEN 60 AND 69 THEN '★' WHEN StudentResult BETWEEN 70 AND 79 THEN '★★' WHEN StudentResult BETWEEN 80 AND 89 THEN '★★★' ElSE '★★★★'                                END         FROM Result        WHERE SubjectNo=@subNO AND ExamDate=@date DECLARE @n intWHILE(1=1) --条件永远成立   BEGIN    SELECT @n=COUNT(*) FROM Result     WHERE SubjectNo=@subNO AND ExamDate=@date AND StudentResult<60 --统计不及格人数    IF (@n>0)       UPDATE Result SET StudentResult=StudentResult+2 FROM Result       WHERE SubjectNo=@subNO AND ExamDate=@date AND StudentResult<=98  --每人加2分    ELSE       BREAK  --退出循环  END


上机五
USE MySchool  GOIF  EXISTS(SELECT * FROM  sysobjects  WHERE  name ='Admin')DROP TABLE AdminGOCREATE TABLE Admin(  --创建表[LoginId]  [nvarchar](50) NOT NULL,[LoginPwd] [nvarchar](50) NOT NULL)ALTER TABLE Admin    --添加主健约束ADD CONSTRAINT PK_Admin PRIMARY KEY (LoginId)GOINSERT INTO Admin([LoginId],[LoginPwd]) VALUES('TEST1','123')    --插入数据INSERT INTO Admin([LoginId],[LoginPwd]) VALUES('TEST2','123456') --插入数据GOUPDATE Admin SET [LoginPwd]='1234567' WHERE [LoginId]='TEST2' --更新数据GO


0 0