成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊 SQL 中的流程控制,你明白了嗎?

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
流程控制是SQL開(kāi)發(fā)中經(jīng)常需要使用到的,特別是條件判斷IF...ELSE,循環(huán)執(zhí)行WHILE是經(jīng)常使用的,對(duì)于想在SQL開(kāi)發(fā)中有所提高的同學(xué),務(wù)必要掌握這幾個(gè)流程控制的用法。

流程控制的定義

一般是指用來(lái)控制程序執(zhí)行和流程分至點(diǎn)額命令,一般指的是邏輯計(jì)算部分的控制。

流程控制種類

常見(jiàn)的流程控制有以下8種:

BEGIN ... END

WAITFOR

GOTO

WHILE

IF ... ELSE

BREAK

RETURN

CONTINUE


下面給大家具體介紹每種流程控制的用法。

BEGIN...END

BEGIN ... END語(yǔ)句用于將多個(gè)T-SQL語(yǔ)句合為一個(gè)邏輯塊。當(dāng)流程控制語(yǔ)句必須執(zhí)行一個(gè)包含兩條或兩條以上的T-SQL語(yǔ)句的語(yǔ)句塊時(shí),使用BEGIN ... END語(yǔ)句。

語(yǔ)法

  • BEGIN
  • sql_statement...
  • END

示例

我們?cè)跀?shù)據(jù)庫(kù)中打印出我們公眾號(hào)的名稱"SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)"

DECLARE @A VARCHAR(20)
SET @A='SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)'
BEGIN
SELECT @A
END

結(jié)果如下:

圖片

這里的SELECT @A就是一條被執(zhí)行的命令語(yǔ)句。

IF [...ELSE]

IF [...ELSE]表示可以只使用IF,也可以IF和ELSE一起使用,表示條件判斷。當(dāng)滿足某個(gè)條件使,就執(zhí)行IF 下面的語(yǔ)句,否則執(zhí)行ELSE下面的語(yǔ)句

IF語(yǔ)法

  • IF <條件表達(dá)式>
  • {命令行 | 程序塊}

IF示例

如果某字符串的長(zhǎng)度大于5,就打印該字符串

DECLARE @A VARCHAR(20)
SET @A='SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)'
IF LEN(@A)>5
SELECT @A

結(jié)果:

圖片

這里結(jié)果與上面的BEGIN...END一樣,但是如果我們將條件改成大于8,結(jié)果可能就不是這樣的了,小伙伴們可以試一下。

IF...ELSE語(yǔ)法

  • IF <條件表達(dá)式>
  • {命令行 | 程序塊}
  • ELSE {命令行 | 程序塊}

IF...ELSE示例

如果字符串的長(zhǎng)度大于10,就打印該字符串,否則打印"字符串長(zhǎng)度太短"

DECLARE @A VARCHAR(20)
SET @A='SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)'
IF LEN(@A)>10
SELECT @A
ELSE
SELECT '字符串長(zhǎng)度太短'

結(jié)果:

圖片

很明顯字符串"SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)"長(zhǎng)度不大于10,所以返回ELSE里的結(jié)果了。

WHILE

WHILE是循環(huán)控制,當(dāng)滿足WHILE后面的條件后,就可以循環(huán)執(zhí)行WHILE下面的語(yǔ)句。通常與CONTINUE和BREAK一起使用,Break命令讓程序完全跳出循環(huán)語(yǔ)句,結(jié)束WHILE命令,CONTINUE是讓命令繼續(xù)返回執(zhí)行

語(yǔ)法

  • WHILE  <條件表達(dá)式>
  • {命令行 | 程序塊}
  • CONTINUE
  • {命令行 | 程序塊}
  • BREAK
  • {命令行 | 程序塊}

示例

有1到10這樣一組數(shù)字,從1按順序開(kāi)始,遇到偶數(shù)就跳過(guò),遇到奇數(shù)就打印出來(lái),當(dāng)遇到9就結(jié)束打印。

DECLARE @i int;
SET @i = 0;
WHILE(@i < 10)
BEGIN
SET @i = @i + 1;
IF(@i % 2 = 0)
BEGIN
PRINT ('跳過(guò)偶數(shù)數(shù)' + CAST(@i AS varchar));
CONTINUE;
END
ELSE IF (@i = 9)
BEGIN
PRINT ('到' + CAST(@i AS varchar) + '就結(jié)束打印');
BREAK;
END
PRINT @i;
END

結(jié)果如下:

圖片

我們只正常打印出來(lái)了1-3-5-7其他的不是跳過(guò)就是到9就結(jié)束了。

RETURN

RETURN語(yǔ)句用于使程序從一個(gè)查詢、存儲(chǔ)過(guò)程或批量處理中無(wú)條件返回,其后面的語(yǔ)句不再執(zhí)行。如果在存儲(chǔ)過(guò)程中使用return語(yǔ)句,那么此語(yǔ)句可以指定返回給調(diào)用應(yīng)用程序、批處理或過(guò)程的整數(shù);如果沒(méi)有為RETURN指定整數(shù)值,那么該存儲(chǔ)過(guò)程將返回0。

語(yǔ)法

RETURN [整數(shù)表達(dá)式]

示例

BEGIN
PRINT(1);
PRINT(2);
RETURN ;
PRINT(3); --在RETURN之后的代碼不會(huì)被執(zhí)行,因?yàn)闀?huì)跳過(guò)當(dāng)前批處理
PRINT(4);
END
GO
BEGIN
PRINT(5);
END

結(jié)果如下:

圖片

RETURN后面的3-4都沒(méi)打印,說(shuō)明在當(dāng)前批處理的RETURN后都沒(méi)執(zhí)行,而新起的BEGIN...END不受上面的RETURN影響,所以打印了5

GOTO

  • GOTO命令用來(lái)改變程序執(zhí)行的流程,使程序跳轉(zhuǎn)到標(biāo)識(shí)符指定的程序行再繼續(xù)往下執(zhí)行。
  • GOTO命令雖然增加了程序設(shè)計(jì)的靈活性,但破壞了程序的結(jié)構(gòu)化,使程序結(jié)構(gòu)變得復(fù)雜而且難以測(cè)試。

注意:

語(yǔ)句標(biāo)識(shí)符可以是數(shù)字或者字母的組合,但必須以":"結(jié)束。而在GOTO語(yǔ)句后的標(biāo)識(shí)符不必帶":"。

GOTO語(yǔ)句和跳轉(zhuǎn)標(biāo)簽可以在存儲(chǔ)過(guò)程、批處理或語(yǔ)句塊中的任何地方使用,但不能超出批處理的范圍。

語(yǔ)法

GOTO  標(biāo)識(shí)符

示例

DECLARE @i INT;
SET @i = 1;
PRINT @i;
SET @i = 2;
PRINT @i;
GOTO ME;
SET @i = 3; --這行被跳過(guò)了
PRINT @i;

ME:PRINT('跳到我了?');
PRINT @i

結(jié)果如下:

圖片

從上面可以看出,當(dāng)跳到ME的時(shí)候,GOTO之前的數(shù)有打印,之后的數(shù)就跳過(guò)了

WAITFOR

用于掛起語(yǔ)句的執(zhí)行,直到指定的時(shí)間點(diǎn)或者指定的時(shí)間間隔。

注意:

WAITFOR常用語(yǔ)某個(gè)特定的時(shí)間點(diǎn)或時(shí)間間隔自動(dòng)執(zhí)行某些任務(wù)。在WAITFOR語(yǔ)句中不能包含打開(kāi)游標(biāo),定義視圖這樣的操作。在包含事務(wù)的語(yǔ)句中不要使用WAITFOR語(yǔ)句,因?yàn)閃AITFOR語(yǔ)句在時(shí)間點(diǎn)或時(shí)間間隔執(zhí)行期間將一直擁有對(duì)象的鎖,當(dāng)事務(wù)中包含WAITFOR語(yǔ)句,事務(wù)的其他語(yǔ)句又需要訪問(wèn)被鎖住的數(shù)據(jù)對(duì)象事就容易發(fā)生死鎖現(xiàn)象。

指定時(shí)間點(diǎn)的語(yǔ)法

WAITFOR   TIME <具體時(shí)間>

示例

在'08:10:00'執(zhí)行打印字符串"SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)"

WAITFOR TIME '08:10:00'
PRINT 'SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)'

如果你執(zhí)行這句話,那如果在今天這個(gè)點(diǎn)之前,那么等到這個(gè)時(shí)候它就會(huì)打印字符串,如果在今天這個(gè)點(diǎn)之后,那你需要等到第二天的這個(gè)時(shí)間點(diǎn)才會(huì)打印。在未執(zhí)行之前查詢窗口是一直"正在執(zhí)行查詢..."狀態(tài)

圖片

指定等待時(shí)間間隔的語(yǔ)法

  • WAITFOR DELAY  'INTERVAR'

INTERVAR為時(shí)間間隔,指定執(zhí)行WAITFOR 語(yǔ)句之前需要等待的時(shí)間,最多為24小時(shí)。

示例

WAITFOR DELAY '00:00:03'
PRINT 'SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)'

在等到3秒鐘后,會(huì)打印出字符串

圖片

總結(jié)

流程控制是SQL開(kāi)發(fā)中經(jīng)常需要使用到的,特別是條件判斷IF...ELSE,循環(huán)執(zhí)行WHILE是經(jīng)常使用的,對(duì)于想在SQL開(kāi)發(fā)中有所提高的同學(xué),務(wù)必要掌握這幾個(gè)流程控制的用法。

責(zé)任編輯:武曉燕 來(lái)源: SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)
相關(guān)推薦

2022-10-19 08:19:32

動(dòng)態(tài)基線預(yù)警

2022-05-31 07:32:19

JDK8API工具

2023-06-14 08:15:34

算法合并操作Winner

2022-10-24 20:25:40

云原生SpringJava

2024-06-06 09:09:41

SQL循環(huán)控制命令

2022-03-03 09:20:08

分布式數(shù)據(jù)庫(kù)場(chǎng)景

2021-09-16 21:34:52

5G專線

2024-05-30 08:19:52

微服務(wù)架構(gòu)大型應(yīng)用

2023-06-05 08:36:04

SQL函數(shù)RANK()

2023-04-04 08:42:30

IT成本技術(shù)堆

2024-08-28 13:09:50

2024-06-12 08:36:25

2023-11-06 07:37:01

函數(shù)式插槽React

2022-04-07 11:15:22

PulseEventAPI函數(shù)

2024-08-09 13:39:27

2022-06-27 08:31:29

數(shù)據(jù)溢出無(wú)符號(hào)

2011-09-08 13:53:31

Node.js

2011-08-24 16:36:00

T-SQL

2024-03-04 07:41:18

SpringAOPOOP?

2024-02-04 00:00:00

@ValidSpring@Validated
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 97国产一区二区 | 91在线精品秘密一区二区 | 热久久免费视频 | 男人天堂999 | 国产乱码精品一区二区三区中文 | 免费国产一区二区 | 欧美日韩成人网 | 精品国产乱码一区二区三区 | 全免费a级毛片免费看视频免费下 | 91久久精品一区二区三区 | 中文字幕日韩在线 | 日韩av一区二区在线观看 | 久久精品一区二区三区四区 | 91热爆在线观看 | 亚洲视频免费观看 | 日韩一区二区三区在线观看 | 久久久www| 成人影院在线视频 | 亚洲精品18 | 国产欧美精品一区 | 综合色影院 | 成人欧美一区二区三区在线观看 | 黄a在线播放 | 精品九九 | 97人澡人人添人人爽欧美 | 99在线免费视频 | 青青久草 | 99riav3国产精品视频 | 精品久久久久久红码专区 | 成人在线精品视频 | 亚洲欧美综合精品久久成人 | 欧美在线视频一区二区 | 欧美国产精品久久久 | 成人免费共享视频 | 色婷婷av一区二区三区软件 | 免费的av | 日本久久精品视频 | 久久国产精品久久国产精品 | 一区二区三区在线 | 黄色一级电影免费观看 | 亚洲一区免费 |