经典的sql资料

源代码在线查看: 实例13(流程控制语句).sql

软件大小: 79 K
上传用户: ddddong
关键词: sql
下载地址: 免注册下载 普通下载 VIP

相关代码

				-- 上课内容:第五单元 T-SQL语言 (流程控制语句)
				
				-- 5.5 流程控制语句
				
				
				 -- 5.5.1 IF ...ELSE 语句
				
				  -- 用于在执行 Transact-SQL 语句时强加条件的条件判断语句。
				
				  -- 语法:
				IF Boolean_expression{ sql_statement | statement_block }
				[ELSE{ sql_statement | statement_block } ] 
				
				IF 条件
				
				    条件满足时执行某个Transact-SQL 语句
				
				[ELSE
				
				    条件不满足时执行某个Transact-SQL 语句]
				
				
				  -- 例1:
				
				 if 26>25
				   print '26>25 条件满足'
				 else
				   print '26				
				 if 21>25
				   print '21				 else
				   print '21>25 条件不满足'
				
				  -- ELSE 子句可选
				
				 if 26>25
				   print '26>25 条件满足'
				
				 if 21>25
				   print '21				
				  -- 例2:
				
				 if 21>25
				   print '21				   print '条件满足'
				 else
				   print '21>25'
				   print '条件不满足'
				
				  -- 显示出错,必须要把一起执行的语句放在一个begin end里
				
				
				 -- 5.5.2 BEGIN ...END 语句
				
				  -- 用于将多个 Transact-SQL 语句组合为一个逻辑块。
				
				  -- 任何时候当控制流语句必须执行一个包含两条或两条以上 Transact-SQL 语句的语句块时,请使用 BEGIN 和 END 语句。
				
				  --语法 :
				
				BEGIN
				 { sql_statement | statement_block }
				END
				
				
				 if 21>25
				   BEGIN
				     print '21				     print '条件满足'
				   END
				 else
				   BEGIN
				     print '21>25'
				     print '条件不满足'
				   END
				
				 -- 5.5.3 WHILE...BREAK...CONTINUE 语句
				
				  -- 只要指定的的条件为真,则 WHILE 语句重复语句或语句块。
				
				  -- 有两条 Transact-SQL 语句通常与 WHILE 同时使用:BREAK 或 CONTINUE。
				
				  -- BREAK 语句退出最内层 WHILE 循环,CONTINUE 语句重新开始 WHILE 循环。
				
				  -- 如果没有其它行可以处理,则程序可能执行 BREAK 语句。如果要继续执行代码,则可执行 CONTINUE 语句。
				
				  -- 语法:
				
				WHILE Boolean_expression
				{ sql_statement | statement_block }
				[ BREAK ]
				{ sql_statement | statement_block }
				[ CONTINUE ] 
				
				  -- 例3:
				
				-- 显示最终结果:
				
				declare @i int
				declare @j int
				select @i=1,@j=1
				while @i				  begin
				    set @j=@i*@j
				    set @i=@i+1
				  end
				    select @i-1 as 'de  ',@j as 'jicheng '
				
				-- 显示每个步骤的结果:
				
				declare @i int
				declare @j int
				select @i=1,@j=1
				while @i				  begin
				    set @j=@i*@j
				    set @i=@i+1
				    select @i-1 as 'de  ',@j as 'jicheng '
				  end
				
				  -- 例4:BREAK CONTINUE的用法
				declare @i int
				declare @j int
				select @i=1,@j=1
				while @i				  begin
				    set @j=@i*@j
				    set @i=@i+1
				    if @i=3
				       break
				    else
				       continue
				  end
				    select @i-1 as 'de  ',@j as 'jicheng '
				
				
				 -- 5.5.4 CASE 语句
				
				 -- 在pubs数据库authors表中,在不改变表内数据的前提下,显示州的全拼
				
				  -- 例5:
				
				 SELECT au_id,au_lname,'StateName'
				   =CASE
				      WHEN state='CA' THEN 'California'
				      WHEN state='KS' THEN 'Kansas'
				      WHEN state='TN' THEN 'Tennessee'
				      WHEN state='OR' THEN 'Oregon'
				        END
				 FROM authors
				
				
				  -- 例6:
				
				 SELECT au_id,au_lname,
				   StateName=CASE state
				      WHEN 'CA' THEN 'California'
				      WHEN 'KS' THEN 'Kansas'
				      WHEN 'TN' THEN 'Tennessee'
				      WHEN 'OR' THEN 'Oregon'
				        END
				 FROM authors
				
				  -- 例7:
				
				 SELECT au_id,au_lname,
				   CASE state
				      WHEN 'CA' THEN 'California'
				      WHEN 'KS' THEN 'Kansas'
				      WHEN 'TN' THEN 'Tennessee'
				      WHEN 'OR' THEN 'Oregon'
				        END AS StateName
				 FROM authors
				
				 -- 5.5.5 GOTO 语句
				
				  -- 将执行流变更到标签处。
				
				  -- 跳过 GOTO 之后的 Transact-SQL 语句,在标签处继续处理。
				
				  -- GOTO 语句和标签可在过程、批处理或语句块中的任何位置使用。
				
				  -- GOTO 语句可嵌套使用。 
				
				  -- 例8:用goto 语句来替换while语句的操作,完成例3的功能
				
				declare @i int
				declare @j int
				select @i=1,@j=1
				lab:
				    set @j=@i*@j
				    set @i=@i+1
				    if @i				      goto lab
				    else
				    select @i-1 as 'de  ',@j as 'jicheng ' 
				
				 
				 -- 5.5.6 WAITFOR 语句
				
				  -- 指定触发语句块、存储过程或事务执行的时间、时间间隔或事件。
				
				  -- 语法:
				
				  WAITFOR { DELAY 'time' | TIME 'time' }
				
				
				  -- 例9:等待3秒执行查询
				
				   WAITFOR DELAY '0:0:3'
				   select * from authors
				
				  -- 例10:等到某一时间执行查询
				
				   WAITFOR TIME '19:10'
				    select * from authors  
				
				 -- 5.5.7 RETURN 语句
				
				  -- 例11:
				
				 if 1>2
				   print '条件正确'
				 else
				   begin
				    print '条件 '
				    return 
				    print '出错 '
				   end
				
				
				准备工作:
				
				create table stu_info
				(
				t_number char(8),
				t_name char(10),
				t_gender char(2),
				t_birthday datetime
				)
				
				create table course
				(
				c_number char(6),
				c_name char(20),
				c_credit int,
				c_hour int,
				c_teacher char(10)
				)
				
				
				create table exam
				(
				t_number char(8),
				c_number char(6),
				t_grade decimal(5,2)
				)
				
				insert into stu_info values('20040301','张华','女','19840113')
				insert into stu_info values('20040302','王立','男','19830624')
				insert into stu_info values('20040303','蒋超','男','19841115')
				insert into stu_info values('20040304','王浩雨','男','19851020')
				insert into stu_info values('20040305','张静','女','19840418')
				insert into stu_info values('20050301','李华','女','19830113')
				insert into stu_info values('20050302','张立','男','19840624')
				insert into stu_info values('20050303','黄超','男','19851125')
				insert into stu_info values('20050304','汪雨','男','19861020')
				insert into stu_info values('20050305','王静','女','19850418')
				
				--向course表插入数据
				insert into course values('100101','高等数学',2,60,'赵金')
				insert into course values('100102','大学英语',3,80,'王维')
				insert into course values('100103','大学物理',2,60,'李华')
				insert into course values('100104','大学英语',4,80,'刘杰')
				insert into course values('100105','大学英语',NULL,80,'刘杰')
				
				--向exam表插入数据
				insert into exam values('20040301','100101',79)
				insert into exam values('20040301','100102',88)
				insert into exam values('20040302','100101',90)
				insert into exam values('20040302','100103',75)
				insert into exam values('20040303','100101',79)
				insert into exam values('20040303','100102',75)
				insert into exam values('20040303','100103',95)
				insert into exam values('20040304','100102',43)
				insert into exam values('20040304','100103',68)
				insert into exam values('20040305','100101',64)
				insert into exam values('20040305','100102',87)
				insert into exam values('20040305','100103',92)
				
				
				-- 练习:
				
				
				-- 1. 声明2个变量 i int ,j int 分别给 i,j 赋值为 25,35,根据实际情况显示 'i>j' 或 'i				
				
				-- 2. 查询显示exam表,使t_grade >=90     显示 优;
					           --	80					           --	70					           --	60					           --	t_grade				
				
				-- 3. 用while循环语句来完成1加到10
				
				
				-- 4. 用goto语句来完成1加到10
				
				
				
				
				
				
				
				
				
				
				-- 练习参考答案:
				
				
				-- 1. 声明2个变量 i int ,j int 分别给 i,j 赋值为 25,35,根据实际情况显示 'i>j' 或 'i				declare @i int
				declare @j int
				select @i=25,@j=35
				if @i>@j
				   print 'i>j'
				else
				   print 'i				
				
				-- 2. 查询显示exam表,使t_grade >=90     显示 优;
					           --	80					           --	70					           --	60					           --	t_grade				
				 SELECT t_number,c_number,t_grade,'等级'=
				   CASE 
				      WHEN t_grade>=90 THEN '优'
				      WHEN t_grade>=80 and t_grade				      WHEN t_grade>=70 and t_grade				      WHEN t_grade>=60 and t_grade				      ELSE '不及格'
				        END
				 FROM exam
				
				
				
				-- 3. 用while循环语句来完成1加到10
				declare @i int,@j int
				set @i=1
				set @j=0
				while @i				  begin
				    set @j=@j+@i
				    set @i=@i+1
				  end
				print @j
				
				-- 4. 用goto语句来完成1加到10
				declare @i int,@j int
				set @i=1
				set @j=0
				lab:
				    set @j=@j+@i
				    set @i=@i+1
				    if @i				      goto lab
				    else
				    print @j
							

相关资源