?? 實例13(流程控制語句).sql
字號:
-- 上課內(nèi)容:第五單元 T-SQL語言 (流程控制語句)
-- 5.5 流程控制語句
-- 5.5.1 IF ...ELSE 語句
-- 用于在執(zhí)行 Transact-SQL 語句時強加條件的條件判斷語句。
-- 語法:
IF Boolean_expression{ sql_statement | statement_block }
[ELSE{ sql_statement | statement_block } ]
IF 條件
條件滿足時執(zhí)行某個Transact-SQL 語句
[ELSE
條件不滿足時執(zhí)行某個Transact-SQL 語句]
-- 例1:
if 26>25
print '26>25 條件滿足'
else
print '26<25 條件不滿足'
if 21>25
print '21<25 條件滿足'
else
print '21>25 條件不滿足'
-- ELSE 子句可選
if 26>25
print '26>25 條件滿足'
if 21>25
print '21<25 條件滿足'
-- 例2:
if 21>25
print '21<25'
print '條件滿足'
else
print '21>25'
print '條件不滿足'
-- 顯示出錯,必須要把一起執(zhí)行的語句放在一個begin end里
-- 5.5.2 BEGIN ...END 語句
-- 用于將多個 Transact-SQL 語句組合為一個邏輯塊。
-- 任何時候當控制流語句必須執(zhí)行一個包含兩條或兩條以上 Transact-SQL 語句的語句塊時,請使用 BEGIN 和 END 語句。
--語法 :
BEGIN
{ sql_statement | statement_block }
END
if 21>25
BEGIN
print '21<25'
print '條件滿足'
END
else
BEGIN
print '21>25'
print '條件不滿足'
END
-- 5.5.3 WHILE...BREAK...CONTINUE 語句
-- 只要指定的的條件為真,則 WHILE 語句重復語句或語句塊。
-- 有兩條 Transact-SQL 語句通常與 WHILE 同時使用:BREAK 或 CONTINUE。
-- BREAK 語句退出最內(nèi)層 WHILE 循環(huán),CONTINUE 語句重新開始 WHILE 循環(huán)。
-- 如果沒有其它行可以處理,則程序可能執(zhí)行 BREAK 語句。如果要繼續(xù)執(zhí)行代碼,則可執(zhí)行 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<4
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<4
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<4
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數(shù)據(jù)庫authors表中,在不改變表內(nèi)數(shù)據(jù)的前提下,顯示州的全拼
-- 例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 語句
-- 將執(zhí)行流變更到標簽處。
-- 跳過 GOTO 之后的 Transact-SQL 語句,在標簽處繼續(xù)處理。
-- 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<11
goto lab
else
select @i-1 as 'de ',@j as 'jicheng '
-- 5.5.6 WAITFOR 語句
-- 指定觸發(fā)語句塊、存儲過程或事務執(zhí)行的時間、時間間隔或事件。
-- 語法:
WAITFOR { DELAY 'time' | TIME 'time' }
-- 例9:等待3秒執(zhí)行查詢
WAITFOR DELAY '0:0:3'
select * from authors
-- 例10:等到某一時間執(zhí)行查詢
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表插入數(shù)據(jù)
insert into course values('100101','高等數(shù)學',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表插入數(shù)據(jù)
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,根據(jù)實際情況顯示 'i>j' 或 'i<j'
-- 2. 查詢顯示exam表,使t_grade >=90 顯示 優(yōu);
-- 80<=t_grade<90 顯示 良;
-- 70<=t_grade<80 顯示 中;
-- 60<=t_grade<70 顯示 及格;
-- t_grade<60 顯示 不及格;
-- 3. 用while循環(huán)語句來完成1加到10
-- 4. 用goto語句來完成1加到10
-- 練習參考答案:
-- 1. 聲明2個變量 i int ,j int 分別給 i,j 賦值為 25,35,根據(jù)實際情況顯示 'i>j' 或 'i<j'
declare @i int
declare @j int
select @i=25,@j=35
if @i>@j
print 'i>j'
else
print 'i<j'
-- 2. 查詢顯示exam表,使t_grade >=90 顯示 優(yōu);
-- 80<=t_grade<90 顯示 良;
-- 70<=t_grade<80 顯示 中;
-- 60<=t_grade<70 顯示 及格;
-- t_grade<60 顯示 不及格;
SELECT t_number,c_number,t_grade,'等級'=
CASE
WHEN t_grade>=90 THEN '優(yōu)'
WHEN t_grade>=80 and t_grade<90 THEN '良'
WHEN t_grade>=70 and t_grade<80 THEN '中'
WHEN t_grade>=60 and t_grade<70 THEN '及格'
ELSE '不及格'
END
FROM exam
-- 3. 用while循環(huán)語句來完成1加到10
declare @i int,@j int
set @i=1
set @j=0
while @i<11
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<11
goto lab
else
print @j
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -