尚矽谷MySQL學習筆記(Day_6)-流程控制結構介紹
流程控制結構介紹
順序結構:程式從上往下依次執行
分支結構:程式可以從兩條或多條路徑中選擇一條去執行
迴圈結構:程式在滿足一定條件的基礎上,重複執行一段程式碼
一、分支結構
1.if 函式
功能:實現簡單的雙分支
語法: if (表示式1,表示式2,表示式3)
執行順序 :如果表示式1成立,則 if 函式返回表示式2的值,否則返回表示式3的值
應用:任何地方
2.case結構
情況1:類似於 java 中的switch語句,一般用於實現等值判斷
語法:
CASE 變數|表示式|欄位
WHEN 要判斷的值 THEN 返回的值1【或語句1;;】
WHEN 要判斷的值 THEN 返回的值2【或語句2;;】
…
ELSE 要返回的值n【或語句n;】
END 【CASE;】
情況2:類似於 java 中的多重IF語句,一般用於實現區間判斷
語法:
CASE
WHEN 要判斷的條件1 THEN 返回的值1【或語句1;;】
WHEN 要判斷的條件2 THEN 返回的值2【或語句2;;】
…
ELSE 要返回的值n【或語句n;】
END 【CASE;】
特點:
①
可以作為表示式,巢狀在其他語句中使用,可以放在任何地方,BEGIN END中或BEGIN END 的外面
可以作為獨立的語句去使用,只能放在BEGIN END中
②
如果WHEN中的值滿足或條件成立,則執行對應的THEN後面的語句,並且結束CASE
如果都不滿足,則執行ELSE中的語句或值
③
ELSE可以省略,如果ELSE省略了,並且所有WHEN條件都不滿足,則返回NULL
案例:建立儲存過程,根據傳入的成績,來顯示等級,比如傳入的成績:90~100,顯示A ,80~90,顯示B ,60~80, 顯示C,否則顯示D
CREATE PROCEDURE test_case(IN score INT)
BEGIN
CASE
WHEN score>=90 AND score<=100 THEN SELECT 'A';
WHEN score >=80 THEN SELECT 'B';
WHEN score >=60 THEN SELECT 'C';
ELSE SELECT 'D';
END CASE;
END $
CALL test_case(95) $
3.if 結構
功能:實現多重分支
語法:
if 條件1 then 語句1;
elseif 條件2 then 語句2;
…
【else 語句n;】
end if;
應用在begin end中
案例1:根據傳入的成績,來顯示等級,比如傳入的成績:90~100,返回A ,80~90返回B 60~80,返回C,否則返回D
CREATE FUNCTION test_if(score INT) RETURNS CHAR
BEGIN
IF score >= 90 AND score<=100 THEN RETURN 'A';
ELSEIF score >= 80 THEN RETURN 'B';
ELSEIF score >=60 THEN RETURN 'C';
ELSE RETURN 'D';
END IF;
END $
SELECT test_if(86) $
二、迴圈結構
分類:
while、loop、repeat
迴圈控制:
iterate 類似於 continue,繼續,結束本次迴圈,繼續下一次
leave 類似於 break,跳出,結束當前所在的迴圈
1.while
語法:
【標籤:】while 迴圈條件 do
迴圈體;
end while 【標籤;】
聯想: while (迴圈條件){ 迴圈體 }
2.loop
語法:
【標籤:】loop
迴圈體 ;
end loop 【標籤】;
可以用來模擬簡單的死迴圈
3.repeat
語法:
【標籤:】repeat
迴圈體;
until 結束迴圈的條件
end repeat【標籤】;
4.案例說明
1.沒有新增迴圈控制語句
案例:批量插入,根據次數插入到admin表中多條記錄
CREATE PROCEDURE pro_while1(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<= insertCount DO
INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('Rose',i),'666');
SET i = i+1;
END WHILE;
END $
CALL pro_while1(100) $
SELECT * FROM admin $
2.新增leave語句
案例:批量插入,根據次數插入到admin表中多條記錄,如果次數>20則停止
TRUNCATE TABLE admin$
DROP PROCEDURE test_while1 $
CREATE PROCEDURE test_while1(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
a:WHILE i<= insertCount DO
INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('xiaohua',i),'0000');
IF i>=20 THEN LEAVE a;
END IF;
SET i = i+1;
END WHILE a;
END $
CALL test_while1(100) $
SELECT * FROM admin $
3.新增iterate語句
案例:批量插入,根據次數插入到admin表中多條記錄,只插入偶數次
TRUNCATE TABLE admin$
DROP PROCEDURE test_while1 $
CREATE PROCEDURE test_while1(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 0;
a:WHILE i<= insertCount DO
SET i = i+1;
IF MOD(i,2)!= 0 THEN ITERATE a;
END IF;
INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('xiaohua',i),'0000');
END WHILE a;
END $
CALL test_while1(100) $
SELECT * FROM admin $
三、總結
四、練習
已知表 stringcontent
其中欄位:id 自增長 content varchar(20)
向該表插入指定個數的,隨機的字串
CREATE TABLE stringcontent(
id INT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(20)
)$
CREATE PROCEDURE test(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;#定義一個迴圈變數i,表示插入次數
DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
DECLARE startIndex INT DEFAULT 1;#代表起始索引
DECLARE len INT DEFAULT 1;#代表擷取的字元長度
WHILE i<= insertCount DO
SET startIndex = FLOOR(RAND()*26+1); #產生一個隨機的整數,代表起始索引1-26
SET len =FLOOR(RAND()*(20-startIndex+1)+1);#產生一個隨機的整數,代表擷取長度,1-(26-startIndex+1)
INSERT INTO stringcontent(content) VALUES (SUBSTR(str,startIndex,len));
SET i = i+1;
END WHILE;
END $
CALL test(10)$
SELECT * FROM stringcontent $
相關文章
- 三天學會MySQL學習筆記 尚矽谷婷姐MySql筆記
- 尚矽谷Java基礎——學習程式碼和筆記_day02Java筆記
- 尚矽谷_Java零基礎教程(物件導向上)--學習筆記(十一)Java物件筆記
- 表示-抽象-控制——系統結構模式學習筆記抽象模式筆記
- webpack 學習筆記:入門介紹Web筆記
- Jenkinsant介紹(學習筆記五)Jenkins筆記
- uboot-uboot介紹-學習筆記boot筆記
- 一文學會JDBC實現java和mySQL的資料連線(尚矽谷學習課程程式碼+筆記+思路總結)JDBCJavaMySql筆記
- Go 結構 學習筆記Go筆記
- 學習筆記二--Weex語法介紹筆記
- DG學習筆記(1)_入門介紹筆記
- 【尚矽谷-Java學習】5.3 關鍵字 superJava
- 遊戲引擎學習筆記:介紹、架構、設計及實現遊戲引擎筆記架構
- MySQL事務控制語句(學習筆記)MySql筆記
- GO 學習筆記->結構體Go筆記結構體
- 資料結構學習筆記資料結構筆記
- 19.Java學習筆記第十九節——多執行緒(尚矽谷視訊整理)Java筆記執行緒
- [PyTorch 學習筆記] 5.1 TensorBoard 介紹PyTorch筆記ORB
- 尚矽谷 jQuery 筆記(張曉飛 2018)jQuery筆記
- 結構動力學教材-學習筆記筆記
- MySQL學習筆記之命令總結MySql筆記
- Oracle體系結構學習筆記Oracle筆記
- 資料結構學習筆記--棧資料結構筆記
- 資料結構學習筆記1資料結構筆記
- CUDA 學習筆記之gpu結構筆記GPU
- ASM學習筆記_體系結構ASM筆記
- Java學習筆記:Javaweb的伺服器介紹Java筆記Web伺服器
- 學習筆記-React的簡單介紹&工作原理筆記React
- MySql學習筆記MySql筆記
- JAVANIO學習筆記1-架構簡介Java筆記架構
- JavaScript學習筆記 - 進階篇(3)- 流程控制語句JavaScript筆記
- 結構化程式設計--學習筆記程式設計筆記
- 【C#學習筆記】結構體使用C#筆記結構體
- jQuery 學習筆記:jQuery 程式碼結構jQuery筆記
- DG學習筆記(2)_體系結構筆記
- 資料結構學習筆記(一) (轉)資料結構筆記
- 資料結構學習筆記-堆排序資料結構筆記排序
- 『忘了再學』Shell流程控制 — 36、for迴圈介紹