15.5. Lesson: 视图

当您编写查询时,您需要花费大量时间和精力来制定它。使用视图,您可以将SQL查询的定义保存在可重复使用的“虚拟表”中。

The goal for this lesson: 若要将查询保存为视图,请执行以下操作。

15.5.1. 创建视图

您可以将视图视为表,但其数据来自查询。让我们基于上面的内容来创建一个简单的视图:

create view roads_count_v as
  select count(people.name), streets.name
  from people, streets where people.street_id=streets.id
  group by people.street_id, streets.name;

如您所见,唯一的变化是 create view roads_count_v as 开头的部分。我们现在可以从该视图中选择数据:

select * from roads_count_v;

结果:

 count |    name
-------+-------------
     1 | Main Road
     2 | High street
     1 | Low Street
(3 rows)

15.5.2. 修改视图

一个视图不是固定的,它不包含“真实数据”。这意味着您可以轻松地更改它,而不会影响数据库中的任何数据:

CREATE OR REPLACE VIEW roads_count_v AS
  SELECT count(people.name), streets.name
  FROM people, streets WHERE people.street_id=streets.id
  GROUP BY people.street_id, streets.name
  ORDER BY streets.name;

(此示例还显示了对所有SQL关键字使用大写的最佳实践约定。)

您将看到我们已经添加了一个 ORDER BY 子句,以便我们的视图行被很好地排序:

select * from roads_count_v;

 count |    name
-------+-------------
     2 | High street
     1 | Low Street
     1 | Main Road
(3 rows)

15.5.3. 删除视图

如果不再需要某个视图,可以按如下方式将其删除:

drop view roads_count_v;

15.5.4. In Conclusion

使用视图,您可以保存查询并像访问表一样访问其结果。

15.5.5. What's Next?

有时,当更改数据时,您希望您的更改在数据库中的其他位置生效。下一课将向您展示如何做到这一点。