MySQL學習隨記---視圖和SQL編程的 if case 和 循環

視圖

定義

視圖只是一個語句規則

語法

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

作用

(1) 可以簡化查詢
(2) 可以進行權限控制

視圖與表關係

視圖是表的查詢結果, 自然表的數據變了, 影響視圖結果
(1) 視圖的數據與表的數據一一對應時, 可以修改[由計算而來的數據不可更改]
(2) 視圖增刪改也會影響到表, 但是視圖並不總是能增刪改
(3) 對於視圖insert還應注意, 視圖中必須包含表中沒有默認值得列
注意: 一般來說, 視圖只是用來查詢的, 不應該執行增刪改操作

SQL編程

1. 變量聲明

(1)會話變量
定義形式:
set @變量名 = 值;
示例:
set @long =555;
SELECT @long;
(2)普通變量
定義形式:
declare 變量名 類型 [default 默認值]
說明:
1.他必須先聲明(即定義),此時也可以賦值;
2.賦值跟會話變量一樣: set 變量名 = 值;
3.他只能在編程環境中使用!!!
說明: 什麼是編程環境?
存儲過程, 函數, 觸發器


(3)變量的賦值形式

語法1:

set 變量名 = 表達式; #此語法中變量必須先使用declare聲明


語法2:

set @變量名 = 表達式; #此語法無需使用declare聲明, 而是直接賦值


語法3:

 select @變量名 := 表達式; #此語句會給該變量賦值, 同時還會最爲一個select語句輸出 '結果集'

示例: SELECT @age := 12;


語法4:

select 表達式 into @變量名; #此語句雖然看起來是select語句, 但其實比不輸出 '結果集', 而是給變量賦值

示例: SELECT 33 + 33 INTO @age; SELECT @age;

2. 運算符

(1)算術運算符

+ - * / %

注意: MySQL沒有++和--運算符

(2)關係運算符

> >= < <= =(等於)<>(不等於) !=(不等於)

(3)邏輯運算符

and(與) or(或)not(非)

3. 語句塊包含符

所謂的語句塊包含符, 在js中, 以及絕大部分的其他語言中, 都是大括號: {}
他用在很多場合: if, switch, for, function

而MySQL編程中的語句塊包含符如下:


4. if判斷

MySQL支持兩種判斷, 第一個是 if 判斷, 第二個是 case 判斷

if 語法

單分支
if 條件 then
    //代碼
end if;

雙分支
if 條件 then
    //代碼1
else
    //代碼2
end if;

多分支
if 條件 then
    //代碼1
elseif 條件 then
    //代碼2
else
    //代碼3
end if;

案例: 接收4個數字, 如果輸入1則輸出春天  2=>夏天 3=>秋天 4=>冬天 其它數字=>出錯
我們使用存儲過程來體驗 if 語句用法

create procedure 存儲過程名(參數, 參數, ...)
begin
        //代碼
end

注意: 通常情況下, ";" 表示SQL語句結束, 同時向服務器提交併執行. 但是存儲過程中有很多SQL語句, 每一句都要以分號隔開, 這時候我們就需要使用其他符合來代替向服務器提交的命令. 通過delimiter命令改變語句結束符
語法: delimiter 符號  示例: delimiter $

CREATE PROCEDURE p1 (n INT)
BEGIN

IF n = 1 THEN
	SELECT '春天' AS '季節';
ELSEIF n = 2 THEN
	SELECT '夏天' AS '季節';
ELSEIF n = 3 THEN
	SELECT '秋天' AS '季節';
ELSEIF n = 4 THEN
	SELECT '冬天' AS '季節';
ELSE
	SELECT '出錯' AS '季節';
END IF;

END;



調用 語法: call 存儲過程的名稱(參數)
CALL p1(3);

5. case判斷

case 變量
when值 then 語句;
when值 then 語句;
else 語句;
end case;

案例同 if

CREATE PROCEDURE p2(n INT)
BEGIN

CASE n
WHEN 1 THEN SELECT '春天' AS '季節';
WHEN 2 THEN SELECT '夏天' AS '季節';
WHEN 3 THEN SELECT '秋天' AS '季節';
WHEN 4 THEN SELECT '冬天' AS '季節';
ELSE SELECT '出錯' AS '季節';
END CASE;

END


6. 循環

MySQL支持的循環有loop, while, repeat 循環

(1) loop 循環
標籤名: loop
    leave 標籤名    --退出循環
end loop;

(2) while 循環
[標籤: ]while 條件 do
    //代碼
end while;

(3) repeat 循環
repeat
    //代碼
until 條件 end repeat;

案例 使用 loop 循環, 完成計算1到n的和;

CREATE PROCEDURE p3 (n INT)
BEGIN

DECLARE i INT DEFAULT 1;
DECLARE s INT DEFAULT 0;

aa:LOOP
	IF i>n THEN
	LEAVE aa;
	END IF;
	SET s=s+i;
	SET i=i+1;
END LOOP;
SELECT s;

END

案例 使用 while 循環, 完成計算1到n的和;

CREATE PROCEDURE p4 (n INT)
BEGIN

DECLARE i INT DEFAULT 1;
DECLARE s INT DEFAULT 0;

WHILE i<=n DO
	SET s=s+i;
	SET i=i+1;
END WHILE;
SELECT s;

END

案例 使用 repeat 循環, 完成計算1到n的和;

CREATE PROCEDURE p5 (n INT)
BEGIN

DECLARE i INT DEFAULT 1;
DECLARE s INT DEFAULT 0;

REPEAT
	SET s=s+i;
	SET i=i+1;
UNTIL i>n END REPEAT;
SELECT s;

END




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章