ORDER BY应该更改结果集吗?

时间:2013-01-31 22:58:09

标签: mysql sql-order-by

我的印象是在SQL查询中使用ORDER BY不会影响为结果集选择哪些记录。我认为ORDER BY只会影响结果集的显示。

但是,最近,在我使用ORDER BY子句之前,我从查询中得到了意外的结果。这表明a)ORDER BY可以影响结果集中包含哪些记录,或者b)我还有其他需要处理的错误。

这是什么?

以下是查询:SELECT node_id FROM users ORDER BY node_id LIMIT 100

(node_id既是主键又是外键)。

如您所见,查询包含LIMIT子句。似乎如果我使用ORDER BY,则在选择前100之前订购记录。我曾期望它根据自然顺序选择100条记录,然后根据node_id进行排序。

我已经在ORDER BY上查找了信息但是到目前为止,我能找到的唯一信息表明它只会影响演示文稿......我正在使用MySQL。

2 个答案:

答案 0 :(得分:2)

ORDER BY反映LIMIT条款之前所有记录的顺序。要获得您想要的结果,您将需要:

select u.node_id
from users u
join
(
    SELECT node_id
    FROM users 
    LIMIT 100
) us ON u.node_id = us.node_id
ORDER BY u.node_id

这样,您将首先使用limit子句并获取前100条记录,然后您将对其结果进行排序。 join子句比double Select语句更快,特别是如果你正在使用许多记录。

答案 1 :(得分:1)

您可以使用嵌套查询:

SELECT node_id  FROM 
(
SELECT node_id FROM users LIMIT 100
) u 
ORDER BY node_id