1. 什么是视图?
- 他也是数据库的一部分
- 视图是一张虚拟表
- 视图建立在已有表的基础上,这些原基础的视图被称为基表
- 视图提供数据内容语句为select语句,可以将视图理解为存储起来的select语句
- 视图向用户提供基表数据的另一种表现方式
2. 视图的作用? 表
- 权限控制的时候可以使用
- 简化复杂的多表查询
视图的概述: 视图是一个或多个表中导出来的表,它是一种虚拟存在的表,并且表的结构和数据都依赖于基本表,通过视图不仅可以看到存放在基本表中的数据,并且还可以像操作基本表一样,对视图中存放的数据进行查询,修改,和删除。
视图的优点: 1.简化查询语句 视图不仅可以简化用户对数据的理解,也可以简化对数据的操作,从而使用户避免大量的重复操作。 2.安全性 通过视图用户只能查询和修改他们所能见到的数据,数据库中的其他数据即看不到也取不到,,数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和列上。 3.逻辑数据独立性 视图可以帮助用户屏蔽真实表结构变化带来的影响。
创建视图的语法格式
create view 视图名 [字段] as select 语句
例如:
create table student(
sid int,
name varchar(20),
math float,
chinese float
);
insert into student(sid,name,math,chinese)values(1,'tom',80,70);
insert into student(sid,name,math,chinese)values(2,'jack',85,40);
insert into student(sid,name,math,chinese)values(3,'luny',70,50);
insert into student(sid,name,math,chinese)values(4,'som',90,60);
创建视图
create view view_stu as select math,chinese,math+chinese from student;
create view view_stu2 (math,chin,sum)as select math,chinese,math+chinese from student;
在多表上创建视图
CREATE TABLE category(
cid VARCHAR(10) PRIMARY KEY,
cname VARCHAR(50)
)
商品表
CREATE TABLE products(
pid VARCHAR(10) PRIMARY KEY,
pname VARCHAR(50),
price INT,
flag VARCHAR(2),
category_id VARCHAR(10),
FOREIGN KEY (category_id) REFERENCES category(cid)
);
商品分类添加数据
INSERT INTO category VALUES('c001','家电');
INSERT INTO category VALUES('c002','鞋服');
INSERT INTO category VALUES('c003','化妆');
INSERT INTO category VALUES('c004','汽车');
商品表
INSERT INTO products VALUES ('p001','小米电视',5000,'1','c001');
INSERT INTO products VALUES ('p002','格力空调',3000,'1','c001');
INSERT INTO products VALUES ('p003','海尔冰箱',4500,'1','c001');
INSERT INTO products VALUES ('p004','篮球鞋',800,'1','c002');
INSERT INTO products VALUES ('p005','李宁卫衣',200,'1','c002');
INSERT INTO products VALUES ('p006','鸿星尔克鞋',300,'1','c002');
INSERT INTO products VALUES ('p007','足球鞋',1300,'1','c002');
INSERT INTO products VALUES ('p008','神仙水',2000,'1','c003');
INSERT INTO products VALUES ('p009','大宝SOD蜜',100,'1','c003');
查询所有的商品和商品分类信息
SELECT
*
FROM
products,category
WHERE category_id = cid
基于刚才的操作,创建一张视图
CREATE VIEW pc AS
SELECT
*
FROM
products,category
WHERE category_id = cid
各个分类下商品平均价格
SELECT
cname '商品分类',
AVG(price)
FROM
products,category
WHERE
category_id = cid
GROUP BY
cname
通过视图查询
SELECT
AVG(price)
FROM
pc
GROUP BY
cname
查询鞋服下最贵的鞋的全部信息
SELECT products.* from products join category ON products.category_id = category.cid WHERE cname='鞋服' and price=(SELECT MAX(price) from products join category ON products.category_id = category.cid GROUP BY category_id HAVING category_id = (select cid from category where cname ='鞋服'));
利用视图
select products.* from pc where cname='鞋服' and price=(select max(price) from category,products where category_id=cid and cname='鞋服');
查看视图
show table status like '视图名';
show create view 视图名;
修改视图
alter view view_name [(column_list)] as select_statement;
更新视图 insert 在基表中插入新的数据, delete from 视图名 where 字段名=值
删除视图
drop view [if exists] view_name;
视图和表的区别:
- 视图是建立在表之上的,表存储的数据库中的数据,而视图存得是一个数据的展示(select查询语句)
- 通过视图不能改变表中的数据(一般情况下视图中的数据都是表中的列,经过计算得到的结果,不允许更新)
- 删除视图,表不受影响,而删除表,视图不在起作用
|