маленькая проблема sql - PullRequest
       8

маленькая проблема sql

0 голосов
/ 04 октября 2009

Если следующие операторы 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 ]

4 голосов
/ 04 октября 2009

Реляционные базы данных не работают таким образом. Индекс - это средство для выбора значений, выполняющих меньше работы (то есть не нужно сканировать все строки, чтобы найти значение), это не средство для упорядочения значений в наборе результатов.

Фактически, большинство (все?) Реляционных баз данных гарантируют только одну вещь, связанную с порядком, а именно: не существует гарантированного порядка , если в запросе нет порядка по условию.

Итак, если вы хотите упорядочить результаты, вы должны использовать предложение 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 голос
/ 04 октября 2009

Вы должны указать это в запросе, например,

SELECT * FROM orders ORDER BY order_num ASC;

По умолчанию нет определенного способа заказа определенной таблицы.

0 голосов
/ 04 октября 2009

В общем, нет, для этого нет никаких оснований.

0 голосов
/ 04 октября 2009

Нет, строки будут отображаться в неопределенном порядке в зависимости от фактического программного обеспечения базы данных - обычно порядка, в котором они хранятся в базе данных.

Уникальный индекс имеет порядок сортировки, но это просто для контроля того, как индекс хранится и насколько эффективно он используется.

Правильный способ сделать это - добавить желаемый вид ко всем вашим запросам:

SELECT * 
FROM [orders] 
ORDER BY [order_num]
0 голосов
/ 04 октября 2009

Если вы не укажете предложение ORDER BY в операторе SQL SELECT, нет гарантии, в каком порядке будут возвращены строки. Данная база данных может возвращать их в порядке первого UNIQUE INDEX, но это не является точным, и может даже меняться со временем для той же базы данных.

Чтобы быть уверенным в порядке, в котором возвращаются ваши строки, всегда указывайте предложение ORDER BY в вашем операторе SELECT. Вот так:

SELECT * FROM orders ORDER BY order_num;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...