################
#MySQL编程
################
-- DDL数据定义语言 :create drop alter
-- DML数据操作语言:insert select update delete
-- DCL数据控制语言:grant(授予权限)revoke(收回权限)
-- MySQL增加了语言元素:常量 变量 运算符 函数 流程控制语句 注释
#######1.变量
-- 局部变量:declare声明,可以用default说明默认值 只在begin...end之间有效
-- 比如declare c int default 0;
-- 用户变量:会话变量、全局变量 前面加@ :=赋值
-- set @x=0
-- set @color := 'red'
select @x,@color;
-- 会话变量
#设置会话变量 三种方式
set session x = 1;
set @@session.x =1;
set x =1;
#查看会话变量 下面四中方式
show session variables;-- 查看所有
show session variables like '%var%'; -- 查看特定变量的值
select @@x;
select @@session.x;
-- 全局变量
#设置全局变量 两种方式
set global x = 1;
set @@global.x =1;
#查看全局变量 两种方式
select @@global.x;
show global variables like '%var%';
##############2.运算符
-- 算术运算符 :+ 、- 、 * 、 / 、 %
-- 逻辑运算符 and与&& :所有操作数部位0不为null,结果返回1;存在一个0,返回0;存在一个null且没有1,返回null
-- or与|| :所有操作数只要有一个不为0不为null,结果返回1;所有操作数只有0,返回0,所有操作数有0有null,返回null。
-- not与! :非0返回0;0返回1;null返回null
-- xor :只要有null就返回null;全都是非零或者全是零 就返回0;一个非零一个0 返回1(逻辑相同返回0)
-- 比较运算符 =、<= 、<> 、between and 、in、is null、like、regexp
-- 位运算符 先变成二进制再变成十进制 & | ~ >> ^ <<
###############3.流程控制语句
-- if(条件,结果1,结果2)
select address_id,if(name='k', yes ,no) from student;
if num < 6 then select num
end if;
/*
if 条件判断 then 执行语句
[elseif 条件判断 then 执行语句 ]
[else 执行语句]
end if
*/
-- CASE表达式
#####################
#1.搜索case表达式
use xscj;
-- case when <求值表达式> then <表达式>
-- when <求值表达式> then <表达式>
-- when <求值表达式> then <表达式>
-- ...
-- else <表达式>
-- END
##case表达式从最初的when开始,如果为真执行then,为假就进行下一步
-- case最后返回
-- ||为字符串拼接
##这句没有达到预期效果 可能 ||在MySQL不支持
SELECT product_name,
CASE WHEN product_type = '衣服'
THEN 'A :' || product_type
WHEN product_type = '办公用品'
THEN 'B:' || product_type
WHEN product_type = '厨房用具'
THEN 'C :' || product_type
ELSE NULL
END AS abc_product_type
FROM Product;
SELECT product_name,
CASE WHEN product_type = '衣服'
THEN 'A'
WHEN product_type = '办公用品'
THEN 'B'
WHEN product_type = '厨房用具'
THEN 'C'
ELSE NULL
END AS abc_product_type
FROM Product;
when <求值表达式> then <表达式>
when <求值表达式> then <表达式>
...
ELSE <表达式>
end
##进行行列转换
select product_type,
sum(sale_price) as sum_price from product
group by product_type;
-- 下面进行行列转换
select sum(case when product_type = '衣服'
then sale_price else 0 end)as sum_price_clothes,
sum(case when product_type = '厨房用具'
then sale_price else 0 end)as sum_price_kitchen,
sum(case when product_type = '办公用品'
then sale_price else 0 end)as sum_price_office
from product;
#1.简单case表达式
-- case <表达式>
-- when <表达式> then <表达式>
-- when <表达式> then <表达式>
-- when <表达式> then <表达式>
-- ...
-- else <表达式>
-- END
SELECT product_name,
CASE WHEN product_type = '衣服'
THEN 'A'
WHEN product_type = '办公用品'
THEN 'B'
WHEN product_type = '厨房用具'
THEN 'C'
ELSE NULL
END AS abc_product_type
FROM Product;
#########对比
SELECT product_name,
CASE product_type
WHEN '衣服'
THEN 'A'
WHEN '办公用品'
THEN 'B'
WHEN '厨房用具'
THEN 'C'
ELSE NULL
END AS abc_product_type
FROM Product;
-- 循环语句 (略。。。)