SQL — In Select Query если я использую «Не В», то он возвращает набор результатов в случайном порядке

#sql #sql-server #sql-server-2008

#sql #sql-server #sql-server-2008

Вопрос:

Я использовал предложение NOT IN в инструкции Select. Когда я запускаю этот запрос, каждый раз он возвращает один и тот же набор результатов, но порядок отличается.

Является ли это поведением по умолчанию для предложения «NOT IN»?

Запрос, который я использую, выглядит следующим образом:

 SELECT *,(ISNULL(AppFirstName,'') ' ' ISNULL(AppMiddleName,'') ' ' ISNULL(AppLastName,'')) as AppName FROM BApp AF WHERE AF.SId=11 AND AF.SCId=5 AND AF.CCId= 1 AND AF.IsActive=1 AND AF.ASId=16 AND AF.AId NOT IN (SELECT AId FROM NumberDetails where AId = AF.AId)
  

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

1. Что это за система баз данных?

Ответ №1:

Порядок результата SQL не определен и оставлен для выбора базой данных, если вы не используете предложение ORDER . Если вам нужно узнать больше, опубликуйте запрос и какую базу данных вы используете.

Ответ №2:

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

Причина, по которой это иногда кажется последовательным, заключается в том, что строки часто будут считываться либо в том порядке, в котором они существуют на диске (возможно, в том порядке, в котором они были вставлены), либо в порядке некоторого индекса, который использовался для поиска результата.

Чем сложнее ваш запрос, тем сложнее обработка, которую должна выполнить база данных, поэтому тем меньше вероятность того, что результаты будут получены в каком-то очевидном, повторяющемся порядке.

Мораль истории: всегда используйте предложение ORDER BY .

Ответ №3:

SQL по умолчанию не упорядочивает и не сортирует возвращаемые записи. Это поведение не является специфичным для «NOT IN», но является общей предпосылкой языка. Однако вы можете легко упорядочить свои результаты, добавив ‘ORDER BY table.column_name’ в конец вашего запроса.