含义:虚拟表,和普通表一样使用,视图中的数据来自查询中使用的表,并且试图是动态生成的,并没有保存查询结果可以理解为封装:多次使用
创建视图
语法结构:
creat view 视图名
as
查询语句;
案例 :创建视图查询每个部门的平均工资
CREATE VIEW myv2
AS
SELECT AVG(salary) ag,`department_id`
FROM employees
GROUP BY department_id;
案例: #查询各部门工资级别
SELECT myv2.ag,g.`grade_level`
FROM myv2
JOIN `job_grades` g
ON myv2.ag BETWEEN g.`lowest_sal` AND `highest_sal`;
案例 #查询姓张的学生名和专业名
#之前写法
SELECT `stuNume`,`majorName`
FROM `stuinfo` s
INNER JOIN maijor m
ON s.`maijorId`=m.`id`
WHERE s.`stuNume` LIKE '张%';
#做虚拟表,封装起来
CREATE VIEW v1
AS
SELECT `stuNume`,`majorName`
FROM `stuinfo` s
INNER JOIN maijor m
ON s.`maijorId`=m.`id`;
SELECT *FROM v1 WHERE stuNume LIKE '张%';
语法结构
方式1:
create or replace view 视图名
as
查询语句;
方式二:
alter view 视图名
as
查询语句;
drop view 视图名,视图名
DESC myv2;
SHOW CREATE VIEW myv2;
这个其实很好理解:更新视图的时候同时修改了原始表,所以当视图中有多于原始表中内容的操作的时候都不能执行
#1.插入 (修改视图的时候,原始表也修改了,可以插入的条件是,没有额外多余原始表的东西
INSERT INTO myv1 VALUES('张',NULL,NULL);
SELECT *FROM myv1;
#2.修改
UPDATE myv1 SET last_name='zt' WHERE last_name=''
#3.删除
DELETE FROM myv1 WHERE 条件
系统变量:
全局变量
会话变量
自定义变量:
用户变量
局部变量
作用域:服务器每次启动将为所有全局变量赋值,针对所有连接有效,但是不能跨重启
1.查看所有系统变量
SHOW GLOBAL /【session】 VARIABLES
2.查看满足条件的部分系统变量
SHOW GLOBAL /【session】 VARIABLES LIKE ‘ ’;
3.查看某某个指定系统变量的值
SELECT @@global/【session】系统变量名
4.为某个系统变量赋值
SET GLOBAL/【】 系统变量名=值
或
SET @@ global/【】 . 系统变量名=值;
SHOW VARIABLES;
SHOW VARIABLES LIKE '%ssl%';
SELECT @@autocommit;
SET autocommit=0;
SET @@autocommit=1;
用户自己定义的
声明 赋值 使用
可以应用到任何地方
1.1声明并且初始化
SET @用户变量名=值;
SET @用户变量名:=值;
SELECT @用户变量名:=值;
1.2 赋值
和上面一样 或
SELECT 字段 INTO @变量名
FROM 表
SET @coun=0;
SELECT COUNT(*) INTO @coun
FROM `employees`;
1.3 使用
SELECT @用户变量名;
SELECT @coun;
声明
DECLARE 变量名 类型;
DECLARE 变量名 类型 DEFAULT 值;
赋值
SET 变量名=值
SET 变量名:=值
使用
SELECT 局部变量名
用户变量 局部变量
当前连接 只能在begin END 中第一句
SET @用户变量名=值 DECLARE 用户变量名 类型
案例 :声明两个变量并且赋值 求和 打印
1.用户变量
SET @m=2;
SET @n=3;
SET@sum=@m+@n;
SELECT @sum;
2.局部变量
#下面这样写不行,需要在begin end 中
DECLARE m1 INT DEFAULT 5;
DECLARE n1 INT DEFAULT 6;
DECLARE summ INT ;
SET summ=m1+n1;
SELECT summ;