2009-10-03 2 views
0

Если следующий 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 значения?

+1

Вы должны принять ответы на некоторые из ваших предыдущих вопросов, если вы хотите получить помощь - также отформатируйте код, чтобы он был доступен для чтения. – Mark

+0

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

+0

Черт побери! –

ответ

4

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

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

Так что, если вы хотите заказать результаты, которые вы должны использовать заказ по статье, как

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

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

SELECT * FROM orders ORDER BY order_num ASC; 

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

0

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

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

SELECT * FROM orders ORDER BY order_num; 
+0

sir rows не будут отображаться в порядке возрастания order_num – d3vdpro

+0

Показать пример таблицы (данных) и sql, которую вы используете. –

0

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

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

правильный способ сделать это, чтобы добавить нужный вид на все ваши вопросы:

SELECT * 
FROM [orders] 
ORDER BY [order_num] 
0

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

Смежные вопросы