一点sql问题

时间:2009-10-03 23:51:38

标签: sql

如果按所示顺序执行以下SQL语句:

   CREATE TABLE orders 
        (order_num INTEGER NOT NULL, 
         Buyer_name VARCHAR(35), 
         Amount NUMERIC(5,2));
   CREATE UNIQUE INDEX idx_orderno ON orders(order_num); 

每当查询ORDERS表时,行应按ORDER_NUM值增加的顺序显示?

5 个答案:

答案 0 :(得分:4)

关系数据库无法正常工作。索引是一种选择值减少工作的方法(也就是说,不必扫描所有行来查找值),它不是在结果集中对值进行排序的方法。

事实上,大多数(所有?)关系数据库只保证与订单相关的一件事,那就是没有保证订单如果查询中没有order by子句。

所以,如果你想要有序的结果,你必须使用order by子句,比如

select * from orders order by order_num

默认情况下,order by column将按升序排序。如果您想要反过来,可以使用order by column descorder by column asc也存在。

要按多个列排序,请用逗号

指定它们
select * from orders order by order_num asc, name desc

答案 1 :(得分:1)

您需要在查询中指定,例如

SELECT * FROM orders ORDER BY order_num ASC;

默认情况下,某个表没有可移植的订购方式。

答案 2 :(得分:0)

除非在SQL ORDER BY语句中指定SELECT子句,否则无法保证返回行的顺序。给定的数据库可以按照第一个UNIQUE INDEX的顺序返回它们,但这不确定,甚至可能随着时间的推移而改变同一个数据库。

要确保返回行的顺序,请始终在ORDER BY语句中指定SELECT子句。像这样:

SELECT * FROM orders ORDER BY order_num;

答案 3 :(得分:0)

不会,行将以未定义的顺序显示,具体取决于实际的数据库软件 - 通常是它们存储在数据库中的顺序。

唯一索引 具有排序顺序,但这只是为了控制索引的存储方式以及索引的使用效率。

执行此操作的正确方法是为所有查询添加所需的排序:

SELECT * 
FROM [orders] 
ORDER BY [order_num]

答案 4 :(得分:0)

一般情况下,没有理由这样做。