问一下,在select的时候如果没有加order by子句,那么结果是按照什么来排序的

defender 2003-05-09 10:34:40
请考虑一下牵扯到多表复合查询的情况
...全文
279 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
blactte 2003-05-09
  • 打赏
  • 举报
回复
不好意思,看错题目了
有很多人不看联机帮助,就过来发贴子,我也是没办法

如果没有ORDER BY 子句,是根据表的物理存储顺序来显示的
表的物理存储顺序是按照聚簇索引所建立的字段排序,然后进行存储的
一般是主键的顺序,如果没有主键就是聚簇索引字段的顺序,如果两者都没有,就是按照插入记录的先后次序显示
leimin 2003-05-09
  • 打赏
  • 举报
回复
MSSQLSERVER的排序一般是根据CLUSTERED INDEX来排序的,但是在查询时SQL SERVER有时并不根据CLUSTERED INDEX来检索数据,所以这就造成检索数据时的排序不一致,有时根据CLUSTERED INDEX排序,有时根据系统默认的排序规则(根据字符集不同)排序.SQL SERVER有一个阀值.
你可以通过SHOW EXECUTION PLAN看到QUERY时执行的规划来了解.
defender 2003-05-09
  • 打赏
  • 举报
回复
那么这个所谓的:物理存储顺序 又是按照什么规则来排序的呢
有聚集索引的时候自然是按照索引的顺序了,那没有索引的时候又是按照什么规则呢
还是没明白
CrazyFor 2003-05-09
  • 打赏
  • 举报
回复
表的物理存储顺序
iainet 2003-05-09
  • 打赏
  • 举报
回复
同意BLACTTE的说法!
TO:defender:物理存储顺序:请参见:
聚集索引
在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同。表只能包含一个聚集索引。

如果不是聚集索引,表中各行的物理顺序与键值的逻辑顺序不匹配。聚集索引比非聚集索引有更快的数据访问速度。

有关使用聚集索引的更多信息,请参见创建聚集索引。

defender 2003-05-09
  • 打赏
  • 举报
回复
to blactte(想认识我吗?在靠近一点!)
老大,请看清楚题目,我没有用order by 子句,我昏,不要老抄联机丛书
defender 2003-05-09
  • 打赏
  • 举报
回复
越来越复杂了

物理存储顺序:关系数据库里有这种说法吗,恕我无知

若没有主键就按第一个字段升序排,然后是第二个字段,依次下去:没有充分测试,有点像

期待着高手的到来
blactte 2003-05-09
  • 打赏
  • 举报
回复
ORDER BY 子句按查询结果中的一列或多列对查询结果进行排序,用作排序依据的列总长度可达 8,060。有关 ORDER BY 子句最大大小的更多信息,请参见 SELECT。

排序可以是升序的 (ASC),也可以是降序的 (DESC)。如果没有指定升序还是降序,就假定为 ASC。



重要 ORDER BY 子句的确切结果取决于安装过程中所选的排序规则。有关不同排序规则所产生的影响的更多信息,请参见 SQL Server 排序规则基础知识。


下列查询返回按 pub_id 升序排列的结果。

USE pubs
SELECT pub_id, type, title_id
FROM titles
ORDER BY pub_id

下面是结果集:

pub_id type title_id
------ ------------ --------
0736 business BU2075
0736 psychology PS2091
0736 psychology PS2106
0736 psychology PS3333
0736 psychology PS7777
0877 mod_cook MC2222
0877 mod_cook MC3021
0877 UNDECIDED MC3026
0877 psychology PS1372
0877 trad_cook TC3218
0877 trad_cook TC4203
0877 trad_cook TC7777
1389 business BU1032
1389 business BU1111
1389 business BU7832
1389 popular_comp PC1035
1389 popular_comp PC8888
1389 popular_comp PC9999

(18 row(s) affected)

如果在 ORDER BY 子句中指定了不止一列,排序就是嵌套的。下列语句对 titles 表中的行进行排序,首先按出版商降序排列,然后在各出版商范围内按类型升序排列,最后按价格排序(同样是升序,因为未指定 DESC)。

USE pubs
SELECT pub_id, type, title_id, price
FROM titles
ORDER BY pub_id DESC, type, price



说明 不能对数据类型为 text 或 image 的列使用 ORDER BY。同样,在 ORDER BY 列表中也不允许使用子查询、聚合和常量表达式;不过,可以在聚合或表达式的选择列表中使用用户指定的名称,例如:


SELECT type, sum (ytd_sales) AS sales_total
FROM titles
GROUP BY type
ORDER BY sales_total

firetoucher 2003-05-09
  • 打赏
  • 举报
回复
不一定吧
如果数据库使用hash的话,物理顺序不一定是读出的顺序。
我想可能和数据库的查找机制有关。
sasacat 2003-05-09
  • 打赏
  • 举报
回复
我觉得SQL没有什么物理存储顺序吧?

“若没有主键就按第一个字段升序排,然后是第二个字段,依次下去”这个不是这么简单的,你自己试试就知道不是这样了
yoki 2003-05-09
  • 打赏
  • 举报
回复
可能是按照第一个表的物理存储顺序吧
psxfghost 2003-05-09
  • 打赏
  • 举报
回复
若没有主键就按第一个字段升序排,然后是第二个字段,依次下去
sasacat 2003-05-09
  • 打赏
  • 举报
回复
那你为什么不用ORDER BY呢?
psxfghost 2003-05-09
  • 打赏
  • 举报
回复
按主键升序排序,多表就是按照from后的第一个表升序排序!
或者你修改排序的默认设置,就可以按你需要的排了,不过这样还不如用order by
defender 2003-05-09
  • 打赏
  • 举报
回复
什么叫:按从数据库中读出记录的顺序

不是很明白
defender 2003-05-09
  • 打赏
  • 举报
回复
如果表里面没有主键怎办

上面忘了说了,我的所有表都没有主键,只有索引,虽然每一条记录都有一个唯一的值可以确定该条记录,不要问为什么,这个我决定不了,和现在的话题也无关 :(
愉快的登山者 2003-05-09
  • 打赏
  • 举报
回复
按从数据库中读出记录的顺序。
healoppy 2003-05-09
  • 打赏
  • 举报
回复
是结果集的升序排列
sasacat 2003-05-09
  • 打赏
  • 举报
回复
我想是按主键吧
多表的话就是FROM后第一个表的主键
mateng7654 2003-05-09
  • 打赏
  • 举报
回复
说了这么多自己试试不就行了吗?
加载更多回复(2)

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧