MySQL中的视图是什么?什么是观点,以及它们在现实世界中的使用频率。
如果可能的话,我会在一个外行解释之后请一个例子来帮助我理解!
提前谢谢你; - )
答案 0 :(得分:11)
普通视图只不过是可查询的查询。
示例:
您有两个表,订单和客户,订单包含字段ID,customer_id,performance_date和客户有id,first_name,last_name。
现在假设您要一起显示订单ID,效果日期和客户名称,而不是发出此查询:
SELECT o.id as order_id, c.first_name + ' ' + c.last_name as customer_name,
o.performance_date
FROM orders o inner join customers c
您可以将该查询创建为视图并将其命名为orders_with_customers,在您的应用程序中,您现在可以发出查询
SELECT *
FROM orders_with_customer
一个好处是抽象,您可以改变存储客户名称的方式,例如包含中间名,只需更改视图查询。使用该视图的所有应用程序都会继续这样做,但现在包含中间名。
答案 1 :(得分:3)
答案 2 :(得分:2)
很简单:视图是虚拟表。
视图基于对“真实”表的SELECT查询,但区别在于视图不存储与真实表不同的信息。视图仅引用表并将它们与SELECT所说的方式组合在一起。这使得经常使用的查询更加简化。
这是一个简单的例子。让我们假设您有一张员工表和一个部门表,您希望看到他们的薪水。首先,您可以为工资创建一个视图。
CREATE VIEW SALARIES
AS
SELECT e.name,
e.salary,
d.name
FROM employees AS e, deparments as d
WHERE e.depid = d.depid
ORDER BY e.salary DESC
此查询列出员工的姓名,他/她的薪水和部门,并按工资降序排列。完成此操作后,您可以使用以下查询:
SELECT * from SALARIES
在更大的范围内,您可以制作一个视图,计算员工的平均工资,并列出薪水低于平均工资的人员。在现实生活中,这样的查询要复杂得多。
答案 3 :(得分:1)
在mysql中,视图是存储的选择语句
答案 4 :(得分:1)
您可以将视图视为即时生成的表。在您的查询中,它的行为类似于普通表,但它不是存储在磁盘上,而是在创建视图时定义的SQL语句中必要时动态创建。
要创建视图,请使用:
CREATE VIEW first_names AS SELECT first_name FROM people WHERE surname='Smith'
然后,您可以将此视图用作普通表。诀窍是当你更新表人时,first_names视图也会被更新,因为它只是SELECT语句的结果。
此查询:
SELECT * FROM first_names
将返回表格中名为Smith的人的所有名字。如果更新人员表并重新运行查询,您将看到更新的结果。
基本上,您可以使用嵌套的SELECT语句替换视图。但是,观点有一些优点:
答案 5 :(得分:0)
它们是常见过滤器的简写。
假设您有一个包含已删除列的记录表。通常,您不会对已删除的记录感兴趣,因此您可以创建一个名为Records的视图,从AllRecords表中过滤掉已删除的记录。
这将使您的代码清理,因为您不必在每个语句中附加/前置deleted != 1
。
SELECT * FROM Records
会返回所有未删除的记录。
答案 6 :(得分:0)
简单来说就是
在SQL中,视图是虚拟表 基于SQL的结果集 言。
视图包含行和列 像一张真正的桌子。一个字段 视图是来自一个或多个真实的字段 数据库中的表。
您可以添加SQL函数,WHERE和 JOIN语句到视图和呈现 数据好像数据即将到来 来自一张桌子。
除此之外,您可以在table
的基础view
中插入行,前提是视图引用了唯一的一个表,而视图中未引用的列允许空值。
答案 7 :(得分:0)
视图是预定义某些查询的一种方式。它可以像表一样查询,由查询而不是一组磁盘数据定义。查询它可以查询表的结果。
在大多数情况下,查询视图可以看作等同于将视图的定义查询用作主查询中的子查询。视图允许查询更短且更模块化(因为公共部分在视图中单独定义)。它们还提供了优化的机会(尽管并非所有数据库都这样做;我不确定MySQL是否提供任何优化来更快地创建视图)。
如果更新基础表,则针对视图的查询将自动反映这些更改。
答案 8 :(得分:0)
这篇小文章很好地解释了MySQL中的观点:Views and More in MySQL 5.0