如果按所示顺序执行以下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
值增加的顺序显示?
答案 0 :(得分:4)
关系数据库无法正常工作。索引是一种选择值减少工作的方法(也就是说,不必扫描所有行来查找值),它不是在结果集中对值进行排序的方法。
事实上,大多数(所有?)关系数据库只保证与订单相关的一件事,那就是没有保证订单如果查询中没有order by子句。
所以,如果你想要有序的结果,你必须使用order by子句,比如
select * from orders order by order_num
默认情况下,order by column
将按升序排序。如果您想要反过来,可以使用order by column desc
。 order 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)
一般情况下,没有理由这样做。