“ SELECT column_name FROM table_name”意外结果

时间:2020-09-23 12:39:00

标签: sql sql-server azure-sql-database

我正在使用Azure SQLdb上的示例AdventureWorksLT数据库。查询SELECT * FROM [SalesLT].[Customer]时会得到以下结果。

enter image description here

但是当我查询SELECT CustomerID FROM [SalesLT].[Customer]SELECT TOP 7 CustomerID FROM [SalesLT].[Customer]时,我期望CustomerID列的结果已经像第一个屏幕截图一样以一种排序的方式,但是相反,我得到了这样的意外未排序的结果,例如在下面。

enter image description here

这种意外行为的背后原因是什么?

2 个答案:

答案 0 :(得分:2)

没有意外行为。

SQL表表示无序集。结果集为无序,除非您在最外面的查询中显式包含"sep=," "Service","Reported","Total","%" "a service","23","70","32.86%" "yet_a_service","27","70","38.57%" "more_services","20","70","28.57%"

添加ORDER BY以获得所需的结果:

ORDER BY

如果您没有SELECT TOP 7 CustomerID FROM [SalesLT].[Customer] ORDER BY CustomerID; 并且结果恰好看起来像是有序的,那只是一个巧合。如果要保证订购,则需要ORDER BY

答案 1 :(得分:2)

如果存在意外行为,则是由于错误的假设,因此行存在潜在的物理顺序。没有一个。 SQL是一种解释型语言。如果在没有SELECT的情况下执行ORDER BY语句,则解释器将决定要返回的行。很多时候,行以期望的顺序返回,但是由于解释器不保证行的顺序,所以不能依赖行。

相关问题