#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’ в конец вашего запроса.