博客
关于我
进阶课程Ⅰ复杂的查询
阅读量:151 次
发布时间:2019-02-28

本文共 1736 字,大约阅读时间需要 5 分钟。

数据库视图学习笔记

1.1 视图的概念

这章引入了一个非常有趣的概念——“视图”。简单来说,虽然我们在操作时看起来是在处理表,但实际上我们是通过视图来操作。举个栗子,假设我们有两个表:姓名年龄。当我们将这两个表连接起来,创建一个联合表 姓名+年龄,这个联合表实际上就是一个视图,而在数据库中仍然是存在原来的两个表。这意味着我们可以在视图上进行操作,就像操作一个虚拟表一样。

2.1 视图的意义

使用视图有以下几个优势:

  • 提高效率:减少直接操作底表的复杂性。
  • 可视性:通过合并多个表,展示更清晰的数据。
  • 保密性:可以限制用户对某些字段的访问。
  • 降低冗余:避免在多个地方重复存储相同的数据。

3.1 创建视图

语法

CREATE VIEW 视图名称(列名1, 列名2, ...)AS SELECT 语句

需要注意的是,除了MySQL之外,其他数据库不支持在视图中使用ORDER BY

实例

假设我们有一个product表,结构如下:

CREATE TABLE product(    product_id CHAR(4) NOT NULL,    product_name VARCHAR(100) NOT NULL,    product_type VARCHAR(32) NOT NULL,    sale_price INTEGER,    purchase_price INTEGER,    regist_date DATE,    PRIMARY KEY (product_id));

插入一些数据后,我们可以通过以下SQL创建一个视图product_count,统计每个品类的产品数量:

CREATE VIEW product_count ASSELECT product_type, COUNT(*) AS cnt_productFROM productGROUP BY product_type;

创建完成后,可以在views中查看这个视图。

3.2 修改视图

更新方法

如果需要修改视图,可以使用以下语法:

ALTER VIEW 视图名称 AS SELECT 语句

例如,如果我们想将计数列改为sale_price,可以执行:

ALTER VIEW product_count ASSELECT product_type, COUNT(sale_price) AS cnt_saleFROM productGROUP BY product_type;

3.3 更新视图

视图的更新依赖于底表的数据。例如,如果我们对product表中的某些记录进行更新,视图中的相关数据也会相应更新。虽然这种方式有时可以节省时间,但并不推荐,因为它可能会导致数据不一致。

3.4 删除视图

要删除视图,可以使用以下命令:

DROP VIEW product_count;

3.5 子查询

子查询可以让数据库操作变得更加复杂,但也为数据分析提供了更多可能性。以下是一个示例:

SELECT product_type, cnt_productFROM (    SELECT product_type, COUNT(*) AS cnt_product    FROM product    GROUP BY product_type) AS productsumWHERE cnt_product = 4;

这个查询会先执行最内层的子查询,获取每个品类的产品数量,然后在外层查询中筛选出cnt_product等于4的记录。

3.6 标量子查询

标量子查询是将子查询的结果作为一个字段值使用。例如,我们可以查询出销售单价高于平均销售单价的商品:

SELECT product_type, sale_price, AVG(sale_price) AS avg_saleFROM productWHERE sale_price > (SELECT AVG(sale_price) FROM product);

这个查询会先计算平均销售单价,然后筛选出高于平均值的商品。

通过这些操作,我们可以更高效地管理和分析数据库数据。记住,与其死记硬背,不如边做边学,这样记忆也会更深刻!

转载地址:http://xaxd.baihongyu.com/

你可能感兴趣的文章
OpenLayers 入门使用
查看>>
Openlayers 入门教程(一):应该如何学习 Openlayers
查看>>
openlayers 入门教程(七):Interactions 篇
查看>>
openlayers 入门教程(三):view 篇
查看>>
openlayers 入门教程(九):overlay 篇
查看>>
openlayers 入门教程(二):map 篇
查看>>
openlayers 入门教程(五):sources 篇
查看>>
openlayers 入门教程(八):Geoms 篇
查看>>
openlayers 入门教程(六):controls 篇
查看>>
openlayers 入门教程(十一):Formats 篇
查看>>
openlayers 入门教程(十三):动画
查看>>
openlayers 入门教程(十二):定位与轨迹
查看>>
openlayers 入门教程(十五):与 canvas、echart,turf 等交互
查看>>
openlayers 入门教程(十四):第三方插件
查看>>
openlayers 入门教程(四):layers 篇
查看>>
OpenLayers 项目分析(三)-OpenLayers中定制JavaScript内置类
查看>>
Openlayers下载与加载geoserver的wms服务显示地图
查看>>
Openlayers中使用Cluster+Overlay实现点击单个要素和聚合要素时显示不同弹窗
查看>>
Openlayers中使用Cluster实现点位元素重合时动态聚合与取消聚合
查看>>
Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合
查看>>