MySQL学习随记---视图和SQL编程的 if case 和 循环

来源:互联网 发布:c语言数组删除指定元素 编辑:程序博客网 时间:2024/06/15 12:12

视图

定义

视图只是一个语句规则

语法

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)BEGINIF n = 1 THENSELECT '春天' AS '季节';ELSEIF n = 2 THENSELECT '夏天' AS '季节';ELSEIF n = 3 THENSELECT '秋天' AS '季节';ELSEIF n = 4 THENSELECT '冬天' AS '季节';ELSESELECT '出错' AS '季节';END IF;END;



调用 语法: call 存储过程的名称(参数)
CALL p1(3);

5. case判断

case 变量
when值 then 语句;
when值 then 语句;
else 语句;
end case;

案例同 if

CREATE PROCEDURE p2(n INT)BEGINCASE nWHEN 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)BEGINDECLARE i INT DEFAULT 1;DECLARE s INT DEFAULT 0;aa:LOOPIF i>n THENLEAVE aa;END IF;SET s=s+i;SET i=i+1;END LOOP;SELECT s;END

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

CREATE PROCEDURE p4 (n INT)BEGINDECLARE i INT DEFAULT 1;DECLARE s INT DEFAULT 0;WHILE i<=n DOSET s=s+i;SET i=i+1;END WHILE;SELECT s;END

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

CREATE PROCEDURE p5 (n INT)BEGINDECLARE i INT DEFAULT 1;DECLARE s INT DEFAULT 0;REPEATSET s=s+i;SET i=i+1;UNTIL i>n END REPEAT;SELECT s;END