Order By --SQL的奇怪问题

时间:2014-05-19 10:12:05

标签: sql sql-server sql-server-2008

前几天我遇到Order By的一个奇怪的问题,在创建我使用的新表时

Select - Into - From and Order By (column name) 

当我打开那张桌子时,看不到相应的表格。

我多次重新验证它以确保我做的正确。

我想补充的另一件事是,直到我不使用INTO,我可以看到所需的结果,但是一旦我创建了新表,我看到没有订单专栏。请帮帮我!

提前致谢..在发布问题之前,我做了3天的研究,但还没有解决方案

SELECT 
    [WorkOrderID], [ProductID], [OrderQty], [StockedQty] 
INTO 
    [AdventureWorks2012].[Production].[WorkOrder_test] 
FROM 
    [AdventureWorks2012].[Production].[WorkOrder] 
ORDER BY
    [StockedQty]

2 个答案:

答案 0 :(得分:5)

初学者的SQL 101:SELECT语句没有定义的顺序,除非你定义一个。

  

当我打开那张桌子时

这可能会发出没有订单的SELECT(TOP 1000 IIFC)。

  

在创建新表时,我使用了Select - Into - From和Order By(列名)

哪种类型完全不相关 - 你基本上浪费了对输入数据进行排序的性能。

您希望通过在select中添加order by子句来选择MAKE ONE中的订单。表的内部顺序是聚簇索引,但查询可以按任何顺序返回结果。基本的SQL问题,正如我在第一句中所说的那样。关于sql的任何好书都包含在第一章的其中一章中。 SQL使用set方法,集合没有内在的顺序。

答案 1 :(得分:0)

首先,T-SQL是一种基于集合的语言,并且没有订单。更重要的是它并不意味着串行执行命令,即上述查询不是按顺序执行的,而是SELECT语句的处理顺序如下:

1.FROM
2.ON
3.JOIN
4.WHERE
5.GROUP BY
6.WITH CUBE or WITH ROLLUP
7.HAVING
8.SELECT
9.DISTINCT
10.ORDER BY

现在当您执行不带into的查询时,所选列数据会根据' Order By'子句中指定的条件进行排序,但是当使用Into时,确定new_table的格式通过评估选择列表中的表达式。(记住order by子句尚未评估)。 new_table中的列按选择列表指定的顺序创建,但不能对行进行排序。这是您可以参考here:

的Into子句的限制
Specifying an ORDER BY clause does not guarantee the rows are inserted 
in the specified order.