mysql学习--视图

查询每个栏目下商品的平均价格,并且取平均价格的前3

```sql
select cat_id,avg(shop_price) as pj from goods group by cat_id 
order by avg(shop_price) desc limit 3;
```

查询平均价格由高到低,第三到第五的栏目下商品的平均价

```sql
select cat_id,avg(shop_price) as pj from goods group by cat_id 
order by avg(shop_price) desc limit 2,3;
```

如果频繁的用到栏目商品平均价的表A,可以把A保存为一张表,下次来查询这张表。
但是,如果goods表又添加了新的商品,A就与保存的临时表不一样了。
这个不同步的问题可以用视图来解决。

view可以看做一张虚拟表,是表通过某种运算得到的一个投影,表的变化会影响视图的变化

当视图里的数据与表一一对应时(如果使用了order by和limit,得到的结果就不是与表一一对应了),改变视图,也会引起表的变化。

创建视图:create view 视图名 as select 语句

创建视图的时候,不需要指定视图的列名与列类型。既然视图只是表的某种投影,所以主要步骤在查询表上,查询结果直接命名为视图。

create view stats as select cat_id,avg(shop_price) as pj from goods group by cat_id;

查询栏目平均价格前三高:

select * from stats order by pj desc limit3;

视图的优点:

1、简化查询:复杂的统计时,先用view生成一个 中间结果,再视图查询。

2、更精细的权限控制:比如现在两个网站合作,可以查询对方网站的用户,需向对方用户开放用户表的权限,但是又不想开放用户表 中的密码字段:create view vuser as select user_id,user_name from user;

3、数据多,分表时可以用到:比如说小说站,有1千多万article,分成a1,a2......a5五张表,平均每张表200多万篇,查询小说 时,不知道在那张表:create view article as select title from a1 union.......union title from a5;

发布了20 篇原创文章 · 获赞 0 · 访问量 218

猜你喜欢

转载自blog.csdn.net/alyssa_yu/article/details/104882045
今日推荐