繁体   English   中英

“SELECT column_name FROM table_name”意外结果

[英]"SELECT column_name FROM table_name" unexpected result

我在 Azure SQLdb 上使用示例 AdventureWorksLT 数据库。 当我查询SELECT * FROM [SalesLT].[Customer] ,我得到以下结果,这是预期的。

在此处输入图片说明

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

在此处输入图片说明

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

没有意外的行为。

SQL 表表示无序集。 结果集是无序的,除非您在最外层查询中明确有ORDER BY

添加ORDER BY以获得您想要的结果:

SELECT TOP 7 CustomerID
FROM [SalesLT].[Customer]
ORDER BY CustomerID;

如果您没有ORDER BY而结果恰好看起来是有序的,那只是巧合。 如果要保证排序,则需要ORDER BY

如果出现意外行为,那是因为错误的假设存在行的潜在物理顺序。 没有一个。 SQL 是一种解释型语言。 当在没有ORDER BY的情况下执行SELECT语句时,解释器决定返回哪些行。 很多时候行以所需的顺序返回,但不能依赖它,因为解释器对行排序不做任何保证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM