• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

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

defender 2003-05-09 10:34:40
请考虑一下牵扯到多表复合查询的情况
...全文
84 点赞 收藏 22
写回复
22 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
如果表里面没有主键怎办

上面忘了说了,我的所有表都没有主键,只有索引,虽然每一条记录都有一个唯一的值可以确定该条记录,不要问为什么,这个我决定不了,和现在的话题也无关 :(
回复
按从数据库中读出记录的顺序。
回复
healoppy 2003-05-09
是结果集的升序排列
回复
sasacat 2003-05-09
我想是按主键吧
多表的话就是FROM后第一个表的主键
回复
mateng7654 2003-05-09
说了这么多自己试试不就行了吗?
回复
加载更多回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-05-09 10:34
社区公告
暂无公告