В книге, которую я читаю (Querying SQL Server 2012), автор рассказывает о теории работы баз данных. Он упоминает отношения, атрибуты, кортежи и т. Д.
Он часто подчеркивает тот факт, что некоторые аспекты T-SQL не являются реляционными. Как в следующем отрывке:
В отличие от предыдущих этапов, где результат был относительным, результат этого этапа не является относительным, потому что он имеет гарантированный порядок. Результатом этого этапа является то, что стандартный SQL называет курсором. Обратите внимание, что использование термина «курсор» здесь носит концептуальный характер. T-SQL также поддерживает объект, называемый курсором, который определяется на основе результата запроса и позволяет извлекать строки по одной в указанном порядке. Возможно, вы позаботитесь о возврате результата запроса в определенном порядке для целей представления или если вызывающему абоненту необходимо получить результат таким образом с помощью некоторого механизма курсора, который выбирает строки по одной за раз. Но помните, что такая обработка не является реляционной. Если вам нужно обработать результат запроса реляционным способом - например, определить табличное выражение, такое как представление, основанное на запросе (подробности позже в главе 4), - результат должен быть реляционным. Кроме того, сортировка данных может увеличить стоимость обработки запроса. Если вас не волнует порядок, в котором возвращаются строки результатов, вы можете избежать этих ненужных затрат, не добавляя предложение ORDER BY.
Я хотел бы знать, поскольку каждая реализация SQL
в значительной степени имеет предложение ORDER BY
, которое делает его нереляционным, почему это вообще имеет значение, что (используется набор после ORDER BY
) он больше не является реляционным, поскольку это так везде?
Я могу понять, сказал ли он, что это нестандартно, например, используя !=
вместо <>
для неравенства, потому что это влияет на переносимость и т. Д., Но я не понимаю, почему что-то лучше быть реляционным.
Просвети пожалуйста.