关于视图的概念

MajorBlog 2011-08-10 08:44:36
在书上说:视图是虚表,是从基本表或其它视图中导出的表,数据库中只存放视图的定义,而不存放视图的数据。
如有一视图的定义:
Create view view0 AS select Sno,Sname From Student Where SD='CS'
是不是在数据库中只存放视图的上面的定义?
还有为什么视图的定义不能有 Order by 语句?哪个高手能解析一下原因吗?谢谢
...全文
150 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodluckhyp 2011-08-18
  • 打赏
  • 举报
回复
语法的规定啊
top 100 percent只不过是满足语法的需要
goodluckhyp 2011-08-18
  • 打赏
  • 举报
回复
语法的规定啊
top 100 percent只不过是满足语法的需要
liangyong1107 2011-08-10
  • 打赏
  • 举报
回复
如果想用Order by ,前面加上top 100 percent,在哪里就可以用。。
chtzhking 2011-08-10
  • 打赏
  • 举报
回复
视图表示一个逻辑实体,所以视图中的行是没有顺序的。TOP 和ORDER BY以及FOR XML和ORDER BY可以出现在视图的定义中,单独的ORDER BY却是不可以的。

所以定义视图不能使用ORDER BY。
可以在使用视图的时候使用ORDER BY,例如 SELECT * FROM 视图名称 order by 排序字段
jiemo587 2011-08-10
  • 打赏
  • 举报
回复
还有为什么视图的定义不能有 Order by 语句--
不是视图不能用, Order by生成的结果集不能作为表表达式,除非加上top

如果想用Order by ,前面加上top 100 percent
AcHerat 2011-08-10
  • 打赏
  • 举报
回复
楼主将视图作为子查询看待,子查询中如果没有指定top那么order by是没必要的。
NBDBA 2011-08-10
  • 打赏
  • 举报
回复
1、不绑定架构的一般视图是只存放定义,绑定架构的视图是SQL扩展出来,为了提高性能的特殊视图。
2、因为视图查询时可以加order by,这样如果在视图定义有order by,容易产生误解。

唐诗三百首 2011-08-10
  • 打赏
  • 举报
回复
视图只相当于一个子查询,目的是为了简化查询语法,使其易读易懂.
--小F-- 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 majorblog 的回复:]
还是没有弄明白啊,为什么Order by生成的结果集不能作为表表达式?为什么如果想用Order by ,前面加上top 100 percent,就可以用?能举个例子吗、
[/Quote]
语法的规定啊
top 100 percent只不过是满足语法的需要
chtzhking 2011-08-10
  • 打赏
  • 举报
回复
视图的查询不允许使用ORDER BY子句是有原因的。视图表示一个逻辑实体,不像游标那样可以对行排序,从这个意义来讲,视图与表非常相似
在视图中用order by会报1033的错误,该错误并不是说ORDER BY完全被禁止,而是说只有在两种情况下可以使用该子句即指定TOP或FOR XML。TOP和FOR XML都是T-SQL的扩展,不是标准的SQL元素。TOP和ORDER BY以及ORDER BY和FOR XML是结果集规范(result set specification)的一部分,但单独的ORDER BY并不是。因此,TOP和ORDER BY以及ORDER BY和FOR XML可以出现在视图定义中,而单独的ORDER BY却不行。
----如果你需要把存储的数据返回客户端,可以在视图的外部查询中指定ORDER BY子句。
查询视图时允许使用ORDER BY子句是有道理的,因为客户端希望得到一个物理对象——行集。而且客户端有理由期望得到经过排序的数据。
在外部查询中使用TOP选项时,ORDER BY子句有两个用处:一个是确定要选择哪些行;另一个是确定结果集中行的顺序。但是,当在表表达式中(如在视图的查询中)使用TOP选项时,ORDER BY子句只有一个功能——确定要选择的行。这种情况下,视图还是表示一个有效的表。查询视图时,不保证行会按某个特定的顺序返回,除非在视图的外部查询中也包含ORDER BY子句。当同时指定了TOP时,ORDER BY子句允许出现在视图中(或其他的表表达式中),因为它只具有逻辑功能,不具备物理功能。
MajorBlog 2011-08-10
  • 打赏
  • 举报
回复
还是没有弄明白啊,为什么Order by生成的结果集不能作为表表达式?为什么如果想用Order by ,前面加上top 100 percent,就可以用?能举个例子吗、

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧