**
小白終是踏上了這條不歸路----小文的mysql學習筆記(1)
小白終是踏上了這條不歸路----小文的mysql學習筆記(2)----條件查詢
小白終是踏上了這條不歸路----小文的mysql學習筆記(3)----排序詢查
小白終是踏上了這條不歸路----小文的mysql學習筆記(4)----常見的基本函數
小白終是踏上了這條不歸路----小文的mysql學習筆記(5)----分組查詢
…
…
小白終是踏上了這條不歸路----小文的mysql學習筆記(目錄)
**
流程控制結構主要一共有三種:
順序結構: 程序從上往下依次執行
分支結構: 程序從兩條或多條路徑中選擇一條去執行
循環結構: 程序在滿足一定條件的基礎上,重複執行一段代碼
一、分支結構
1、if函數
語法: IF(表達式1,表達式2,表達式3);
ps:一般和其他的語句如 select、等一起使用
解釋: 如果表達式1成立,則IF函數返回表達式2的值,否則返回表達式3的值
作用: 可以實現簡單的雙分支。
當然下面我們舉一個簡單的例子,只是演示一下if函數,
舉例: 當然這裏2>3 顯然是不正確的,所以輸出表達式3‘錯誤’。
2、case結構
特點:
1、它可以作爲表達式,嵌套在其他語句中使用,可以放在任何地方,BEGIN END中或BEGIN END的外面;
2、它也可以作爲獨立的語句去使用,但只能放在BEGIN END中。
3、如果WHEN中的值滿足或條件成立,則執行對應的THEN後面的語句,並且結束CASE,如果都不滿足,則執行ELSE中的語句或值.
4、ELSE可以省略,如果ELSE省略了,並且所有WHEN條件都不滿足,則返回NULL
case結構一共有兩種情況 ,下面我們來分別說一說
(1)case 函數的使用一: switch case 的效果類似於java中的switch語句,一般用於實現等值判斷。
語法: case 要判斷的字段或表達式
When 常量1 then 要顯示的值1或語句;
When 常量2 then 要顯示的值2或語句;
………
else 要顯示的值n或語句;
end case;
(2)、case函數的使用二: 類似於多重if。一般用於實現區間判斷
語法:case
When 條件1 then 要顯示的值1或語句1;
When 條件2 then 要顯示的值2或語句2;
……
else 要顯示的值n或語句n;
end case;
那麼下面我們簡單的舉一個例子
例: 創建存儲過程,根據傳入的工資,來返回等級,
要求如果工資>=20000,顯示爲A級別;如果工資>15000,顯示爲B級別;
如果工資>10000,顯示爲c級別;否則顯示爲D級別
那麼我們來調用一下:我們輸入工資12500。
明顯返回了等級爲C級。
3、if結構
語法: if 條件1 then 語句1;
elseif 條件2 then 語句2;
… …
【else 語句n】
end if
那麼下面我們來舉一個簡單的 例子:
根據傳入的成績,來顯示等級,比如傳入的成績: 90-100, 返回A,80-90, 返回B,60-80, 返回C,否則,返回D。
調用:我們舉例輸入66分,返回等級爲c等級
二、循環結構
一共有三種: while 、loop 、repeat
流程控制:
iterate 類似於continue, 繼續,結束本次循環,繼續下一次。
leave 類似於 break,跳出,結束當前所在的循環。
注意: 別名;當我們要添加流程控制語句時必須,先給我們的循環取別名;如果不加循環控制語句,那麼可以不用取別名
1、while
ps:先判斷後執行。
語法:
【別名:】 while 循環條件 do
循環體;
end while 【別名】;
那麼下面我們來分別舉一下例子:
(1)沒有添加循環控制語句
批量插入,根據輸入的次數,來決定插入多少條記錄到我們的admin表
我們調用 call in_while(66)$ 插入66個德瑪,都是以及插入了的
(2)添加流程控制leave語句
案例: 批量插入,根據輸入的次數插入數據到admin表,但是一旦條數>15,則立刻終止
調用:我們試着輸入20次,但是大於了十五直接終止,所以只會插入15條數據
(3)添加流程控制iterate語句
案例:批量插入,根據插入次數插入到admin表中多條記錄,只有5的倍數纔會被插入。
調用:我們輸入次數100,那麼符合條件的應該就有20次,so會插入20條數據
2、loop
ps:它沒有內置的循環條件,但是可以通過添加leave語句來跳出循環
語法:
【別名:】loop
循環體;
end loop 【別名】;
ps:一般用來模擬死循環
3、repeat
ps:先執行,後判斷。
語法:
【別名:】 repeat
循環體;
until 結束循環的條件
end repeat 【別名】;
那麼我們簡單的做個例子:同樣是根據輸入次數,批量插入表中多條數據
DELIMITER $
CREATE PROCEDURE a1(IN insertcount INT)
BEGIN
DECLARE i INT DEFAULT 0;
REPEAT
INSERT INTO admin(username,`password`) VALUES(CONCAT('小文+',i),'6666');
SET i=i+1;
UNTIL i>=insertcount
END REPEAT;
END $
我們來調用:插入五條,然後我們來查詢數據,你會發現有一個區別:如果你上面設置變量和之前的while循環一樣設置爲1的話就會少插入一次,所以我們起初設置變量i初始值要設爲0.才能達到和while一樣的效果。
因爲該repeat循環是先執行一次再看是否滿足條件
補充:
rand() 函數
含義: 返回一個隨機的浮點值;即隨即返回一個0到1之間的數,不包括臨界值
簡單的做一個例子來理解它
首先我們來看看我們剛剛admin表中的所有信息,一共二十個嘛,
然後我們舉個栗子:查詢admin表中 隨機五條信息
那麼下面我們簡單的做一個有關循環控制的案例:
創建一個存儲過程,實現向該表插入指定個數的隨機長度的有序字符串
首先我們先創建一個ac表
然後下面在該表中創建存儲過程
DELIMITER $
CREATE PROCEDURE tx(IN insertcount INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE str VARCHAR(30) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
DECLARE start_a INT DEFAULT 1;
DECLARE end_a INT DEFAULT 1;
WHILE i<=insertcount DO
SET start_a=FLOOR(RAND()*26+1);
SET end_a=FLOOR(RAND()*(27-start_a)+1);
INSERT INTO ac(shzu) VALUES(SUBSTRING(str,start_a,end_a));
SET i=i+1;
END WHILE;
END $
那我們簡單的調用,輸入數字5 並且查詢ac表,你會發現這,的確是隨機插入的五條有序的隨機字符串
**
Don`t panic. The moon is lost somewhere in the sea.
--------別慌,月亮也在大海某處迷茫。