Почему мои SQL-запросы выдают другой порядок?

#mysql #sql #sql-order-by #derby

#mysql #sql #sql-order-by #дерби

Вопрос:

У меня есть такая таблица:

 Name     Seats
101      60
102      40
202      100
201      20
 

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

Когда я запускаю этот SQL-запрос:

 select name from rooms
 

Я получаю этот вывод:

 Name
101      
102      
201      
202      
 

Когда я запускаю этот SQL-запрос:

 select seats from rooms
 

Я получаю этот вывод:

 Name
60
40
100
20
 

Обратите внимание, что в моем первом запросе select name from rooms порядок значений в таблицах меняется, в то время как во втором запросе, когда я выбираю места, порядок остается в силе. Почему это так?

Как я могу исправить свой SQL-запрос, чтобы он не изменял порядок имен моих комнат?

Я бы хотел, чтобы он поддерживал порядок и выводил это:

 Name    
101      
102      
202      
201      
 

Комментарии:

1. Порядок строк, возвращаемых оператором SELECT без предложения ORDER BY, не определен.

2. @forpas я вижу, так что, думаю, мне просто повезло все это время

Ответ №1:

Таблицы SQL представляют собой неупорядоченные наборы. Наборы результатов SQL неупорядочены, если нет явного ORDER BY соответствия самому внешнему SELECT .

Точка.

Если у вас нет an ORDER BY , вы не должны ожидать упорядочения результатов. Порядок может меняться от одного запуска к другому.

И, даже если у вас есть ORDER BY , если у вас есть связи (т.Е. Ключи с одинаковыми значениями), Их можно упорядочивать произвольно от одного запуска к следующему.

Комментарии:

1. ооооооооооооооооооо так что мне просто повезло все это время

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

3. @JohnnyRobertson . , , Включите order by , например . order by name

4. о, да, вы правы, теперь я понимаю, спасибо!

5. @JohnnyRobertson Да, вам повезло. Просто убедитесь, что вы явно запрашиваете порядок, когда вам это нужно.

Ответ №2:

Вероятно select name , запрос считывает только индекс (это называется закрытым запросом), а не саму таблицу, создавая другой порядок. Но принцип заключается в том, что вы никогда не должны полагаться на какой-либо конкретный порядок, за исключением случаев, когда он задан предложением order by самого внешнего запроса.

Комментарии:

1. да, казалось, что он упорядочивает его в определенном порядке 101->102->201->202