前几天我遇到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]
答案 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:
Specifying an ORDER BY clause does not guarantee the rows are inserted
in the specified order.