我要求高度了解这两件事情。
从我所读过的内容来看,似乎一般来说,带有ORDER BY
子句的查询会返回一个游标,基本上游标对它们有顺序,而表格实际上是一个不保证顺序的集合
我真正理解的是,为什么这两件事情就像两个独立的动物一样被谈论。对我来说,游标似乎是表的一个子集。我读过的那本书含糊地提到了
" SQL中的某些语言元素和操作可以使用 表的查询结果而不是游标;例子包括表格 表达式和设置运算符"
我的问题是......为什么不呢?即使给出了有序集,为什么SQL不会像表那样处理它呢?
为了澄清,我将在书中输入段落:
带有ORDER BY子句的查询会导致标准SQL调用游标 - 非关系结果,行之间保证顺序。您可能想知道为什么查询返回表结果或游标很重要。 SQL中的一些语言元素和操作期望使用查询的表结果而不是游标;示例包括表表达式和集合运算符......"
答案 0 :(得分:1)
表是结果集。它有列和行。您可以与其他表一起使用它来在一个操作中过滤或组合数据:
SELECT *
FROM TABLE1 T1
JOIN TABLE2 T2
ON T1.PK = T2.PK
游标是存储结果集的变量。它有列,但行无法访问 - 除了顶部的行!您不能直接访问记录,而是必须一次获取它们。
DECLARE TESTCURSOR CURSOR
FOR SELECT * FROM Table1
OPEN TESTCURSOR
FETCH NEXT FROM TESTCURSOR
如果需要,您还可以将它们提取到变量中,以进行更高级的处理。
如果不能为您澄清,请告诉我。
答案 1 :(得分:0)
关于这句话,
“SQL中的某些语言元素和操作可以使用 表的查询结果而不是游标;例子包括表格 表达式和设置运算符“
我认为作者只是说有些情况下在查询片段中使用/
没有意义,因为ORDER BY
应该在外部查询上,它实际上会影响查询的最终结果。
例如,我想不出在ORDER BY
(“表格表达式”)或ORDER BY
表达式中的子查询上放置CTE
的任何意义。 除非(在这两种情况下)都使用IN( )
。
创建TOP n
时,除非同时使用VIEW
,否则SQL Server实际上不允许您使用ORDER BY
。否则,从TOP n
选择时,应指定ORDER BY
,而不是VIEW
本身的代码。